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