Formas de evitar SQL injection em 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 ...
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 ...
Ari Lima
Curtidas 0
Respostas
William
30/01/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...
Mas como falei existem outras maneiras...
GOSTEI 0
Ari Lima
30/01/2013
Muito Obrigado !
GOSTEI 0
Danilo Gomes
30/01/2013
bindValue é sempre uma boa saida e, dependendo do banco (como Oracle), é até mais performático
GOSTEI 0
Marcio Araujo
30/01/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...
Mas como falei existem outras maneiras...
esse blindValue(); é do proprio php???
GOSTEI 0
William
30/01/2013
Olá Márcio!
O método bindValue() faz parte do módulo PDO do PHP.
Exemplo simples:
Esse foi um exemplo bem básico de "INSERT" passando valor via método "bindValue()".
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()".
GOSTEI 0
Marcio Araujo
30/01/2013
esse
coloco nas outras operações?
$stm->bindValue(1, $nome);
coloco nas outras operações?
GOSTEI 0
William
30/01/2013
Márcio o método bindValue() passa valores via parâmetro antes da execução das instruções SQL, exemplo:
SELECT:
INSERT:
UPDATE:
DELETE:
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:
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 ....
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 ....
GOSTEI 0
William
30/01/2013
Só uma correção, as linhas onde eu postei:
o correto é:
No PHP não se usa "." para acessar os métodos e sim "->"!
$stm.bindValue(x, y);
o correto é:
$stm->bindValue(x, y);
No PHP não se usa "." para acessar os métodos e sim "->"!
GOSTEI 0
Marcio Araujo
30/01/2013
vlw, ajudou bastante, entendi tranquilamente!!!
obrigado
obrigado
GOSTEI 0
José
30/01/2013
Tendo entendido que a duvida inicial foi sanada, então estou dando o tópico por concluído.
GOSTEI 0