Поскольку существует так много допустимых символов для адресов электронной почты, существуют ли какие-либо действительные адреса электронной почты, которые сами по себе могут быть атаками XSS или SQL-инъекциями? Я не мог найти информацию об этом в Интернете.
Локальная часть адреса электронной почты может использовать любой из этих символов ASCII:
- Следует ли использовать htmlspecialchars () для информации о вводе или непосредственно перед выходом?
- Как выводить HTML, но предотвращать атаки XSS
- Дезинфекция PHP XSS
- Является ли strip_tags () уязвимым для сценариев атак?
- Как и где может применяться защита XSS в Laravel?
- Верхние и строчные английские буквы (a-z, A-Z)
- Цифры от 0 до 9
- Персонажи ! # $% & '* + – / =? ^ _ `{| } ~
- Символ . (точка, период, полная остановка) при условии, что он не является последним символом и предусматривает также, что он не появляется два или более раза подряд (например, John..Doe @ example.com).
http://en.wikipedia.org/wiki/E-mail_address#RFC_specification
Я не спрашиваю, как предотвратить эти атаки (я уже использую параметризованные запросы и экранирование / очиститель HTML), это скорее доказательство концепции.
Первое, что пришло в голову, было 'OR 1=1--@gmail.com
, за исключением того, что пробелы не допускаются. У всех SQL-инъекций требуются пробелы?
Однако пробелы разрешены, если они заключены в кавычки, поэтому "'OR 1=1--"@gmail.com
является действительным адресом электронной почты. Кроме того, это, вероятно, меньше беспокоит, но, с технической точки зрения, это оба действительных адреса электронной почты:
' BAD SQL STUFF -- <fake@ryanbrunner.com> fake@ryanbrunner.com (' BAD SQL STUFF --)
Даже если это невозможно, по-прежнему нет причин, по которым вы не должны использовать параметризованные запросы и кодировать все пользовательские данные, отображаемые пользователям.
/^[a-z0-9.-_+]@[a-z0-9.-]$/i
я думаю, что совпадает с 99,9999% всех адресов электронной почты;)