FILTER_VALIDATE_EMAIL faz uma seqüência de caracteres segura para inserção no database?

$str = '"mynam@blabl"@domanin.com'; filter_var($str, FILTER_VALIDATE_EMAIL);//return valid email. 

O e-mail acima retornado é verdade … Justo o suficiente que RFC 2822 diz que é um endereço de e-mail legal.

minha pergunta é se você validar um e-mail usando o anterior poderia um e-mail carregar injeções sql que podem prejudicar o db mesmo que você o tenha filtrado com filter_var?

minha pergunta é se você validar um e-mail usando o anterior poderia um e-mail carregar injeções sql que podem prejudicar o db mesmo que você o tenha filtrado com filter_var?

filter_var não é um substituto para o saneamento específico do database, como mysql_real_escape_string() ! É preciso sempre aplicar isso também.

Sim – não confie em nada além do mecanismo de escape específico do database para a segurança da injeção SQL.

Use sempre mysql_real_escape_string() nele antes de usá-lo em SQL.

Além disso, não é seguro de qualquer maneira. _VALIDATE_EMAIL permite cotações simples e o backtick ` nele. (Mas as funções de limpeza nunca devem ser confiáveis, sempre o contexto escapa ou usa o SQL parametrizado).

Eu tendem a usar FILTER_VALIDATE_EMAIL para verificar se o e-mail é válido e, em seguida, mais abaixo, se o e-mail precisa ser salvo em um database, eu eliminaria os caracteres perigosos. As bibliotecas mysql e mysqli estão muito mortas na água, então eu sugiro usar PDO, que é uma opção muito mais segura.

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

Além disso, o link abaixo aconselha quais caracteres são legais em um endereço de e-mail, backways e cotações simples são permitidos no endereço de e-mail, portanto, provavelmente porque FILTER_VALIDATE_EMAIL não os apanha … lembre-se de que estamos procurando endereços de e-mail inválidos e não endereços de e-mail perigosos .

Como qualquer coisa quando se trata de qualquer linguagem de programação, você deve sempre manter a segurança no topo da lista!

http://email.about.com/cs/standards/a/email_addresses.htm

Nunca use VALIDATE , talvez você possa usar o SANITILIZE mas não o recomendo de qualquer maneira.


Considere este código:

 $email = filter_var($_GET['email'], FILTER_VALIDATE_EMAIL); $query = mysqli_query($sql, 'SELECT * FROM table WHERE email = "'.$email.'"'); 

A Injeção SQL básica é " or 1 = 1 , você já ouviu falar sobre isso. Mas não podemos usar espaços e precisamos terminar essa string com algo como @something.com .

Então, começamos com " e adicione or'1'='1' isso funcionará (porque or1=1 falhará). Agora precisamos do @email.com , vamos adicioná-lo como um comentário MySQL ( --@something.com ). Então, esse é o resultado:

 "or'1'='1'--"@email.com 

Teste-o.

Este é um email válido para filter_var e inseguro para mysqli_query .