Предоставляет ли PHP FILTER_VALIDATE_EMAIL достаточную безопасность?

У меня есть страница, где я хочу принять адрес электронной почты в параметрах GET. Если я использую FILTER_VALIDATE_EMAIL, я все еще уязвим для атак xss и javascript и т.п.?

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

Ответ 1

да, действительный адрес электронной почты может использоваться как контейнер для некоторых тщательно обработанных строк.

выйти из "фильтрационного" мышления и войти в "ускользающий" образ мышления. Универсальный фильтр "сделать его безопасным" просто не существует.

например, если адрес электронной почты будет выведен в текстовый документ, то ничего не нужно делать. если его выводят в html-документ, в виде текста node, тогда его нужно экранировать для специальных символов html и entitites. если он помещен в html-документ, и его значение будет находиться внутри атрибута html, то очень нужно выполнить тщательное экранирование, и это будет зависеть от контекста. если он используется в sql-запросе, тогда он должен быть экранирован с помощью специальной функции экранирования базы данных. и так далее.

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

fyi, я помню спецификацию адреса электронной почты, позволяющую процитировать строки, поэтому что-то вроде "<script>alert('xss')</script>"@example.com будет действительным. возможности очевидны.

Ответ 2

Это должно быть достаточно хорошим, но, естественно, вы все равно должны избегать его при вводе его в базу данных и т.д. Вы никогда не знаете, какая ошибка может существовать в PHP или Apache и т.д., что может позволить атаке в любом случае.