SQL Injection
É um ataque no qual um código mal-intencionado é inserido em cadeias de caracteres que são passadas posteriormente para uma instância do SQL Server para análise e execução. Qualquer procedimento que construa instruções SQL deve ser verificado quanto a vulnerabilidades de injeção porque o SQL Server executará todas as consultas sintaticamente válidas que receber. Mesmo dados com parâmetros podem ser manipulados por um invasor qualificado e determinado.
A forma principal de injeção SQL consiste em inserção direta de código em variáveis de entrada de usuário, concatenadas com comandos SQL. Quando as cadeias de caracteres armazenadas são concatenadas subseqüentemente em um comando SQL dinâmico, o código mal-intencionado é executado.
O processo de injeção funciona encerrando prematuramente uma cadeia de caracteres de texto e anexando um novo comando. Como o comando inserido pode ter cadeias de caracteres adicionais anexadas a ele antes de ser executado, o malfeitor encerra a cadeia de caracteres injetada com uma marca de comentário "--". O texto subseqüente é ignorado no momento da execução.
O script a seguir mostra uma injeção SQL simples. O script cria uma consulta SQL concatenando cadeias de caracteres codificadas com uma cadeia de caracteres inserida pelo usuário:
var CidadeDestino; CidadeDestino= Request.form ("Cidade"); var sql = "select * from dbo.Vendas where cidade = '" + CidadeDestino + "'";
Neste cenario usuário é solicitado a inserir o nome de uma cidade.
Se ele inserir Jaboticabal, a consulta criada pelo script terá a seguinte aparência:
SELECT * FROM dbo.Vendas WHERE cidade = 'Jaboticabal'
No entanto, suponha que o usuário insira: 'Jaboticabal'; DROP TABLE dbo.VENDAS --'
Nesse caso, a seguinte consulta é gerada pelo script:
SELECT * FROM dbo.Vendas WHERE cidade = 'Jaboticabal'; DROP TABLE dbo.VENDAS --
O ponto-e-vírgula (;) denota o término de uma consulta e o início de outra. O hífen duplo (--) indica que o restante da linha atual é um comentário e deve ser ignorado. Se o código modificado estiver sintaticamente correto, será executado pelo servidor. Quando o SQL Server processar essa instrução, o SQL Server selecionará primeiro todos os registros em dbo.Vendas onde cidade é Jaboticabal. Em seguida, o SQL Server deletaria a tabela dbo.Vendas.
Contanto que o código SQL injetado esteja sintaticamente correto, a violação não poderá ser detectada programaticamente. Portanto, é necessário validar todas as entradas de usuário e verificar com cuidado o código que executa comandos SQL construídos no servidor que você está usando. Práticas recomendadas de codificação são descritas no proximo tópico.
Acompanhe:
http://scriptsemsql.blogspot.com.br/2016/09/prolepse-sql-injection-sql-server-part-2.html
Nenhum comentário:
Postar um comentário