quarta-feira, 29 de abril de 2009

PHP - Dicas de segurança contra SQL Injection

PHP - Dicas de segurança contra SQL Injection

Para evitar boa parte da vulnerabilidade escrevendo código PHP, vale estar atento as seguintes dicas:
 
Um dos principais problemas está nos tipos numericos que são concatenados as queries, use isso
 
$valor = intval(  $_GET["valor"]  );
ou
$valor = (int)  $_GET["valor"];
 
Para strings, procure nas funções do banco de dados que voce está usando, alguma função de ESCAPE, por exemplo:
 
Para postgresql tem a pg_escape_string
 
$sql = '"SELECT * FROM BLABLA WHERE NOME LIKE '%" . pg_escape_string( $_GET["nome"] ) . "%'";
 
Para mysql tem a mysql_escape_string
 
$sql = '"SELECT * FROM BLABLA WHERE NOME LIKE '%" . mysql_escape_string( $_GET["nome"] ) . "%'";
 

E uma mudança interessante pode atacar o problema na raiz
 
Crie um usuário de banco diferenciado com permissões limitadas as suas tarefas, se ele não precisa escrever em uma tabela, não deve ter permissão, provavelmente ele não precisa modificar estrutura, então sem permissão de CREATE, DROP etc... INSERT DELETE UPDATE só onde ele realmente precisa realizar as operações ... com isso, qualquer falha da sua aplicação que permita o cara executar comandos, só vai permitir que ele o faça nas poucas tabelas com permissão,

Com uma política de permissões bem definida, o estrago potencial é minimizado na raiz, ou seja, no próprio banco de dados.

----------------
 
Estude a possibilidade de usar um framework como o codeigniter por exemplo, frameworks resolvem na largada as principais vulnerabilidades


;-)
cjr