Evitando a SQL Injection

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 !
Anúncios