Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Fala galera.
Gostaria de saber se de fato é impossível fazer SQL injection no PDO quando está sendo utilizando prepare(), acham necessário fazer o escape de dados com addslashes() ou htmlentities() como um adicional de segurança?
Desenvolvi uma aplicação utilizando PDO dessa forma mas fico em dúvida se somente ele já impediria.
Agradeço a ajuda!
Sim, tenho consciência disso, a minha dúvida maior é em relação ao caso de texto se eu utiliza htmlentities() e gravar isso no banco de dados posteriormente e for efetuar uma consulta ou utilizar ele para comparação.
Então utilizar addslashes() ou htmlentities() é realmente necessário, levando em consideração que utilizo prepare() e vou fazer a checagem desses dados posteriormente antes da entrada no DB?
Repetindo: valide sempre o input e filtre sempre o output.
No caso de texto informado pelo usuário, se não há validação, como é o caso de biografia e tal, sanitize a entrada e depois filtre a saída. Por exemplo:
<?php
//...
$bio = filter_input(INPUT_POST, 'bio', FILTER_SANITIZE_STRING);
if (empty($bio)) {
// opz, problemas com a bio
}
Depois de inserido, filtre o valor antes de exibi-lo:
<?php
//...
echo filter_var($bio, FILTER_SANITIZE_SPECIAL_CHARS);
;)Bacana assim fica uma forma mais clara para que eu possa validar os dados na entrada e também na hora da impressão ou comparação dos dados, vlw ;)
Veja, não importa se você está utilizando PDO, MySQLi ou o que seja; independentemente da tecnologia, você deve, absolutamente sempre, validar o input e filtrar o output. Isso é regra básica de segurança da informação.
Então se o seu campo é esperado receber um número, não jogue direto no PDO; valide se o input é mesmo um número. Se o campo é esperado receber uma idade, não jogue direto no PDO; valide se é uma idade mesmo; não saia aceitando 2 anos ou 200 anos.
SEMPRE valide o input e filtre o output.