Array
(
)

Formas de evitar SQL injection em PHP

PHP
Ari Lima
   - 30 jan 2013

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 ...

William (devwilliam)
   - 30 jan 2013

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...

0
|
0

Ari Lima
   - 30 jan 2013

Muito Obrigado !

0
|
0

Danilo Midas)
   - 01 fev 2013

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

0
|
0

Marcio Araujo
   - 01 fev 2013


Citação:
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???

0
|
0

William (devwilliam)
   - 01 fev 2013

Olá Márcio!

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

Exemplo simples:
#Código

$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()".

0
|
0

Marcio Araujo
   - 02 fev 2013

esse

#Código


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



coloco nas outras operações?

0
|
0

William (devwilliam)
   - 02 fev 2013

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

SELECT:
#Código

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


INSERT:
#Código
$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:
#Código
$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:
#Código
$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:
#Código
$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 ....

0
|
0

William (devwilliam)
   - 02 fev 2013

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

#Código

$stm.bindValue(x, y);


o correto é:

#Código
$stm->bindValue(x, y);


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

0
|
0

Marcio Araujo
   - 02 fev 2013

vlw, ajudou bastante, entendi tranquilamente!!!

obrigado

0
|
0

José
   - 27 jul 2013

Tendo entendido que a duvida inicial foi sanada, então estou dando o tópico por concluído.

0
|
0