Olá galera, estou aqui agora para falar sobre um problema muito comum que acontece no mundo dos desenvolvedores, o sql injection. Que nada mais é do que o usuário inserir código malicioso(SQL) em um campo de seu site, software ou o que seja.
Por exemplo, se você faz em algum momento a determinada consulta:
User.find(:all, :conditions => "name = '#{params[:name]}'")
Isso possibilita o usuário a inserir um código malicioso através de sua consulta, ou seja, o usuário pode digitar no campo “name” o seguinte:
'; DELETE FROM PROJECTS; SELECT * from projects where '1'='1
Reultando em:
SELECT * FROM users WHERE name = ''; DELETE FROM USERS; SELECT * from users where '1'='1'
Vixxxx alguém deletou todos os dados da sua tabela de usuários. Mas calma, a solução para este
problema é bem simples, basta ao invés de passar toda a condição com uma string, passa-se um um
array ou um hash:
array:
User.find(:all, :conditions => ["name = ?", params[:name]])
hash:
User.find(:all, :conditions => {:name => params[:name]})
Pequenos detalhes como este são bem relevantes para nós desenvolvedores.
Até a próxima !