Formas de evitar SQL injection em PHP

30/01/2013

2

PHP

Fala ae ninjas....

para evitar SQL injection só basta eu usar a função strip_tags() e a função trim() é o bastante ?

como posso evitar uma invação no meu site? estou usando PHP e MySQL ...
Responder

Posts

30/01/2013

William

Cara existem algumas técnicas rodando pela internet, pessoalmente uso PDO para conexão, manipulação de dados e de quebra ajuda a prevenir o famoso e temido SQL injection, apenas passando os parâmetros via bindValue();

Mas como falei existem outras maneiras...
Responder

30/01/2013

Ari Lima

Muito Obrigado !
Responder

01/02/2013

Danilo Gomes

bindValue é sempre uma boa saida e, dependendo do banco (como Oracle), é até mais performático
Responder

01/02/2013

Marcio Araujo

Cara existem algumas técnicas rodando pela internet, pessoalmente uso PDO para conexão, manipulação de dados e de quebra ajuda a prevenir o famoso e temido SQL injection, apenas passando os parâmetros via bindValue();

Mas como falei existem outras maneiras...


esse blindValue(); é do proprio php???
Responder

01/02/2013

William

Olá Márcio!

O método bindValue() faz parte do módulo PDO do PHP.

Exemplo simples:
$nome = "William";
$pdo = new PDO("mysql:host=localhost; dbname=meu_banco; charset=utf8;", "root", "123456");
$stm = $pdo->prepare('INSERT INTO tabela (nome)VALUES(?)');
$stm->bindValue(1, $nome);

if ($stm->execute()){
	print "Registro incluído com sucesso!";
}else{
	print "Erro ao incluir registro!";
}


Esse foi um exemplo bem básico de "INSERT" passando valor via método "bindValue()".
Responder

02/02/2013

Marcio Araujo

esse


$stm->bindValue(1, $nome);



coloco nas outras operações?
Responder

02/02/2013

William

Márcio o método bindValue() passa valores via parâmetro antes da execução das instruções SQL, exemplo:

SELECT:
$id = 1;
$stm = $pdo->prepare("SELECT * FROM table where id = ?");
$stm.bindValue(1, $id);
$stm->execute();


INSERT:
$nome = "João";
$fone = "99999999";
$stm = $pdo->prepare("INSERT INTO tabela (nome, telefone)VALUES(?, ?)");
$stm.bindValue(1, $nome);
$stm.bindValue(2, $fone);
$stm->execute();


UPDATE:
$id = 1;
$nome = "Pedro";
$fone = "88888888";
$stm = $pdo->prepare("UPDATE tabela SET nome = ?, telefone = ? WHERE id = ?");
$stm.bindValue(1, $nome);
$stm.bindValue(2, $fone);
$stm.bindValue(3, $id);
$stm->execute();


DELETE:
$id = 1;
$stm = $pdo->prepare("DELETE FROM tabela WHERE id = ?");
$stm.bindValue(1, $id);
$stm->execute();


Observe que uso o bindValue() para passar parâmetros para as instruções SQL, cada sinal de "?" é aguardado um parâmetro. Passo os
parâmetros na mesma ordem em q eles aparecem na instrução.

Se vc quiser ainda pode passar o type que será usado no parâmetro (esse parâmetro é opcional), nesse exemplo seria tipo string:
$stm.bindValue(1, $nome, PDO::PARAM_STR);


Existe ainda o bindParam(), nesse vc pode passar até tamanho do parâmetro que será aceito, pessoalmente não tenho costume de usá-lo.

Bom basicamente é isso ....
Responder

02/02/2013

William

Só uma correção, as linhas onde eu postei:

$stm.bindValue(x, y);


o correto é:

$stm->bindValue(x, y);


No PHP não se usa "." para acessar os métodos e sim "->"!
Responder

02/02/2013

Marcio Araujo

vlw, ajudou bastante, entendi tranquilamente!!!

obrigado
Responder

27/07/2013

José

Tendo entendido que a duvida inicial foi sanada, então estou dando o tópico por concluído.
Responder
×
+1 DevUP
Acesso diário, +1 DevUP
Parabéns, você está investindo na sua carreira