FILTER_VALIDATE_EMAIL делает строку безопасной для вставки в базу данных?

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

вышеприведенное электронное письмо возвращает true … Достаточно справедливо, что RFC 2822 говорит, что это юридический адрес электронной почты.

мой вопрос заключается в том, что если вы проверяете электронное письмо с использованием вышеизложенного, может ли электронное письмо выполнять инъекции sql, которые могут нанести вред db, даже если вы отфильтровали его с помощью filter_var?

мой вопрос заключается в том, что если вы проверяете электронное письмо с использованием вышеизложенного, может ли электронное письмо выполнять инъекции sql, которые могут нанести вред db, даже если вы отфильтровали его с помощью filter_var?

filter_var не заменяет mysql_real_escape_string() специфичные для базы данных, такие как mysql_real_escape_string() ! Нужно всегда применять это тоже.

Да – не полагайтесь ни на что, кроме механизма отслеживания базы данных для безопасности от SQL-инъекции.

Всегда используйте mysql_real_escape_string() прежде чем использовать его в SQL.

Кроме того, это не безопасно. _VALIDATE_EMAIL позволяет использовать одиночные кавычки и обратную сторону. (Но функции чистки никогда не следует полагаться, всегда избегать контекста или использовать параметризованный SQL.)

Я имею тенденцию использовать FILTER_VALIDATE_EMAIL, чтобы проверить, является ли электронная почта действительной, а затем дальше по строке, если электронное письмо необходимо сохранить в базе данных, я бы затем удалял опасные символы. Библиотеки mysql и mysqli в значительной степени мертвы в воде, поэтому я бы предложил использовать PDO, который является гораздо более безопасным вариантом.

http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

Кроме того, приведенная ниже ссылка указывает, какие символы являются законными в адресе электронной почты, обратные ссылки и одинарные кавычки разрешены в адресе электронной почты, следовательно, вероятно, почему FILTER_VALIDATE_EMAIL не забирает их … помните, что мы ищем недействительные адреса электронной почты, а не опасные адреса электронной почты ,

Как и все, что касается любого языка программирования, вы всегда должны сохранять безопасность в верхней части списка!

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

Никогда не используйте VALIDATE , возможно, вы можете использовать SANITILIZE но я все равно не рекомендую.


Рассмотрим этот код:

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

Основной SQL-инъекция " or 1 = 1 , вы уже слышали об этом. Но мы не можем использовать espaces, и нам нужно закончить эту строку чем-то вроде @something.com .

Итак, мы начинаем с " и добавляем or'1'='1' это будет работать (потому что or1=1 не удастся). Теперь нам нужно @email.com , давайте добавим его как комментарий MySQL ( --@something.com ). Таким образом, это результат:

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

Попробуй это.

Это действительный адрес электронной почты для filter_var и небезопасный для mysqli_query .