«

»

Nov 08

Print this Post

Previnindo ataques tipo SQL Injection

Problema:

Um ataque SQL Injection por um hacker malicioso pode causar estragos em um banco de dados e expôr informações confidenciais. Uma simples declaração tal como:
SELECT * FROM tbl_user WHERE userId = #URL.userId#
poderia ser facilmente alterada para:
SELECT * FROM tbl_user WHERE userId = 1;DROP TABLE tbl_user
Isso equivale a um fracasso de proporções Titanic, perdendo apenas para a perda do Flamengo num jogo Fla-Flu! (nota do tradutor)

 Solução:

ColdFusion oferece um par de soluções muito simples para previnir que isso aconteça. A primeira é definir o SQL permitido no datasource e usar a tag <cfqueryparam> em todas as suas queries!

Explicação detalhada:

Definindo o SQL permitido em um datasource (fonte de dados):

Quando um novo datasource é configurado, por padrão, o ColdFusion definie o SQL permitido para SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, ALTER, GRANT, REVOKE e Stored Procedures. Quando definirmos um datasource, o SQL permitido deverá conter apenas o que é necessário para a aplicação. Se a aplicação não usar DROP ou GRANT, eles devem ser desligado.

O SQL permitido é acessado via tela Advanced Settings na configuração do datasource.

Usando a tag <cfqueryparam>:

A tag <cfqueryparam> tem múltiplos usos, ela verifica o tipo do parâmetro passado e para databases que usam variáveis de vínculo permanente (bind), permite ao ColdFusion vincular essas variáveis, o que aumenta a performance. Verificando o tipo de dado tambem previne ataques de SQL Injection. O boletim de segurança da Adobe sôbre esta matéria está aqui: http://www.adobe.com/devnet/security/security_zone/asb99-04.html

Para usar a tag <cfqueryparam> simplesmente adicione-a à sua query:

<cfquery datasource="#request.dsn#" name="qGetUserByUserId">
     SELECT * FROM tbl_user 
     WHERE userId = <cfqueryparam value="#URL.userId#" cfsqltype="cf_sql_integer" />
</cfquery>

Agora, se o valor da variável URL não fôr um inteiro, como deveria ser, o ColdFusion emitirá um erro. Esta é uma rápida e fácil correção e deve ser colocada em todas as queries.

by Kevin Schmidt
Versão em inglês: Adobe ColdFusion Cookbook

Permanent link to this article: https://ensina.me/coldfusion/previnindo-ataques-tipo-sql-injection/

Leave a Reply