The Flash The Flash  • 30.01.17 3:11

Como prevenir injeção de código SQL Empty Como prevenir injeção de código SQL 30.01.17 3:11


1 - NÃO utilize as funções mysql_* pois as mesmas são consideradas obsoletas (deprecated) e logo serão removidas. Mais alguns motivos para não usá-las.

Utilize prepared statements, isso vai reduzir a vulnerabilidade de sql injection, pois a consulta é dividida em duas partes, o comando sql e as marcações(? ou :nome) que serão substituidos pelos valores, o primeiro é executado já o segundo mesmo contendo uma instrução sql válida será tratado como texto puro.

As marcações não podem substituídas por nomes de databases, tabelas/views, colunas e valores nas clásulas ORDER BY ou GROUP BY.

Existem dois drivers que suportam isso, o PDO e o mysqli.

Exemplo de prepared staments com PDO:

Código:
$db = new PDO('mysql:host=localhost dbname=teste', 'usuario', 'senha');

$sql = 'INSERT INTO tabela(campo1, campo2, campo3) VALUES(?, ?, ?)';

$stmt = $db->prepare($sql);

$stmt->bindValue(1, 'valor1');
$stmt->bindValue(2, 'valor2');
$stmt->bindValue(3, 'valor3');

$stmt->execute(); // executa o insert ou outra sql
Exemplo de prepared staments com mysqli:

Código:
$db = new mysqli('localhost', 'usuario', 'senha', 'teste');

$sql = 'INSERT INTO tabela(campo1, campo2, campo3) VALUES(?, ?, ?)';

$stmt = $db->prepare($sql);
if(!$stmt){
    echo 'erro na consulta: '. $db->errno .' - '. $db->error;
}

$var1 = 1;
$var2 = 'foo';
$var3 = 1.99;
$stmt->bind_param('isd', $var1, $var2, $var3);
$stmt->execute();

A string isd corresponde aos tipos de dados passados que são integer, string, double e b para campos blob conforme o manual.

nadi0s nadi0s  • 02.02.17 21:38

Como prevenir injeção de código SQL Empty Re: Como prevenir injeção de código SQL 02.02.17 21:38

Ótimo! Muito obrigado por compartilhar.

Nando Nando  • 02.02.17 21:52

Como prevenir injeção de código SQL Empty Re: Como prevenir injeção de código SQL 02.02.17 21:52

PDO é muito bom, mas deixa o site um pouco lerdo, então... eu utilizo MySQLi que também é seguro!

xjoao xjoao  • 02.02.17 22:10

Como prevenir injeção de código SQL Empty Re: Como prevenir injeção de código SQL 02.02.17 22:10

Muito bom parabéns

The Flash The Flash  • 02.02.17 22:35

Como prevenir injeção de código SQL Empty Re: Como prevenir injeção de código SQL 02.02.17 22:35

Nando escreveu:PDO é muito bom, mas deixa o site um pouco lerdo, então... eu utilizo MySQLi que também é seguro!
Nunca tentei usar mysqli, mas não acho pdo lerdo sera
Permissões neste sub-fórum
Não podes responder a tópicos

BH Servers

Recomendamos a BH Servers com proteção DDOS gratuita em Cloud Server de alta performance. Entrega imediata.