Injeção de SQL
Os ataques por
injeção de comandos SQL (SQL injection) afetam os websites que dependem de bancos de dados relacionados. Neste tipo de site, os parâmetros são passados para o banco de dados como uma consulta SQL. Assim, se um designer não verificar os parâmetros passados para a consulta SQL, um hacker pode modificar a consulta para acessar todo o banco de dados e até mesmo modificar o seu conteúdo.
Na verdade, alguns caracteres permitem coordenar várias consultas SQL ou ignorar o resto do pedido. Ao inserir este tipo de caractere na consulta, um hacker pode potencialmente executar a consulta que você escolher.
Vejamos o seguinte pedido, esperando um nome de usuário como parâmetro:
SELECT * FROM usuários WHERE nome="$nome";
Basta que um hacker introduza um nome como “toto” OR 1=1 OR nome = " titi” para que o pedido se transforme no seguinte:
SELECT * FROM usuários WHERE nome="toto" OR 1=1 OR nome ="titi";
Assim, com o pedido acima, a cláusula WHERE sempre é realizada, o que significa que devolverá os registros que correspondem a todos os usuários.
Procedimentos armazenados
Além disso, certos sistemas de gestão de bancos de dados, como o
Microsoft SQL Server, possuem procedimentos armazenados que possibilitam executar comandos de administração. Estes procedimentos armazenados são potencialmente perigosos, já que permitir que um usuário mal-intencionado execute comandos do sistema, podendo conduzir a uma eventual intrusão.
Como evitar SQL injection
Diversas ações ajudam a se proteger de ataques por injeção de SQL. Entre eles estão
verificar o formato dos dados introduzidos, principalmente a presença de caracteres especiais,
não exibir mensagens de erro explícitas que mostram o pedido ou parte da consulta SQL,
excluir contas de usuários não utilizadas,
não aceitar contas sem senha,
restringir os privilégios das contas utilizadas e excluir os procedimentos armazenados.