Никогда не используйте VALIDATE
, может быть, вы можете использовать SANITILIZE
, но я все равно не рекомендую его.
Рассмотрите этот код:
$email = filter_var($_GET['email'], FILTER_VALIDATE_EMAIL);
$query = mysqli_query($sql, 'SELECT * FROM table WHERE email = "'.$email.'"');
Базовая SQL-инъекция - " or 1 = 1
, вы уже слышали об этом.Но мы не можем использовать пробелы, и нам нужно завершить эту строку чем-то вроде @something.com
.
Итак, мы начнем с "
и добавим or'1'='1'
, это будет работать (потому что or1=1
не удастся).Теперь нам нужен @email.com
, давайте добавим его в качестве комментария MySQL (--@something.com
).Итак, вот результат:
"or'1'='1'--"@email.com
Проверьте это.
Это действительный адрес электронной почты для filter_var
и небезопасный для mysqli_query
.