PHP: Programando com segurança
Este documento tem como ênfase a programação com o mínimo de segurança aceitável para um sistema. Quando falamos de segurança, temos que ter noção que um projeto já deve nascer com esta preocupação. Que os programadores deste projeto também tenham esta preocupação na construção do código.
Parte 2: Tratamento de dados e SQL injection
Tratamento de dados
Regra número dois, sempre que passar um dado via GET, tratar esse dado usando REGEX ou qualquer tipo de máscara para ter certeza do tipo de dado recebido.
Exemplo:
http://exemplo.com.br/exemplo.php?cod=123
$cod = int($_GET['cod']);
//isto já transformaria qualquer dado para inteiro
//isto já transformaria qualquer dado para inteiro
SQL injection
Esta regra é comumente usada por programadores desatentos. Nunca passe dados de um formulário direto para um query. Exemplo:
Código HTML:
<input type=text name=login>
<input type=password name=senha>
<input type=password name=senha>
Código PHP:
<?php
$sql = "SELECT * FROM users WHERE user=$login AND pass=$senha";
?>
$sql = "SELECT * FROM users WHERE user=$login AND pass=$senha";
?>
Ou seja, as variáveis $login e $senha chegam direto no banco de dados sem nenhum tratamento ou o que pode acontecer.
Se o usuário digitar no login ou na senha OR "1=1", ou seja:
$user = a nada OR 1=1 -->passou
$senha = a nada OR 1=1 -->passou
e pode-se fazer muito mais....
Uma simples validação de senha e login evitaria isso, sendo este tipo de invasão muito comum e de responsabilidade do programador, não do servidor de hospedagem.
em vez de receber assim $_POST['variavel']
não seri amais prudente receber assim $variavel
?