SQL Injection

Senhores, hoje falaremos brevemente de um assunto muito importante: Data Sanitization que de um modo geral são técnicas para evitar a injeção de códigos maliciosos nos pontos de interação entre o usuário e o software.

Entendendo

Observe o seguinte código, onde temos uma rotina de inserção no banco de dados:


Esse código te faz mal? Sentiu um frio na espinha? Ou talvez, uma vontade de vomitar?

Se você conhece SQL Injection, você sabe que essa query possibilita a demissão de quem fez  entrada de dados maliciosos.

Por quê? Esse código não tem uma validação de dados na entrada do usuário.

Eu poderia, por exemplo, acabar com o sistema invalidar todo o código anterior da rotina e inserir um novo código para manipular o banco de dados de diversas formas.
Veja um exemplo:



Playstation III S '; DROP TABLE Produtos; -- a aspa simples e os dois-pontos representam um macete para invalidar todo o código anterior, pois a string query não está fazendo tratamento da aspa simples, com isso, o macete fecha a string e deixa vulnerável a inserção de declarações SQL, e para complementar, os dois traços -- transformam em comentário todo o código posterior ao injetado.

Nesse exemplo, estamos deletando a tabela Produtos no banco de dados. Dá para imaginar o estrago?

Resolvendo


Veja um exemplo de como resolver esse desastre problema:



Repare que agora a string query está diferente, estamos utilizando @parametrização. Posteriormente, fizemos a substituição desses parâmetros pelo valor, onde, cmd.Parameters.addWithValue(string parameter, object value) faz todo o trabalho de validação antes de mandar o código para o banco de dados.

Essa foi uma prosa simples de como injetar códigos maliciosos em SQL e como resolver esse perigo.

Quem estiver interessado em se aprofundar no assunto, existe um artigo no codeproject falando a respeito.

Até a próxima.

Nenhum comentário :

Postar um comentário