Intereting Posts
Cогласование страницы и параметры получения XSLT: использовать параметры в xls: сортировать атрибуты (динамическая сортировка) Почему я не могу использовать $ this как лексическую переменную в PHP 5.5.4? Может ли какой-либо неблагоприятный эффект добавление ссылки и метатеги на главной странице веб-страницы? Отображение значений пользовательских полей продукта в заказе после обработки Безопасное всплывающее окно возможно? преобразование числовой базы 10 в основание 62 (a-zA-Z0-9) Как безопасно запретить запуск загруженного файла через PHP на любом сервере? Yii2 – Вызов команды консоли Yii из другой команды консоли? Как использовать функции готовности печати в библиотеке PHPExcel Проблемы с лотереей Php Как отправить электронную почту с вложением с помощью PHP? Как удалить повторяющиеся строки из файла CSV? Преобразовать временную метку в читаемую дату / время PHP Поиск совпадения парциального значения в массиве

PHP RegEx: обнаружение уязвимости в шаблоне проверки электронной почты

Следующий шаблон регулярного выражения (для PHP) предназначен для проверки любого адреса электронной почты:

^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$ 

В нем говорится: «сопоставляйте хотя бы одну (или более) буквы верхнего и / или нижнего регистра и / или периоды, подчеркивания и / или тире, за которыми следует один и только один символ @, за которым следует хотя бы одна (или более) буквы верхнего и / или нижнего регистра, и / или периоды, и / или символы подчеркивания, за которыми следует один и только один период, за которым следует от двух до шести верхних и / или строчных букв .

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

(Чтобы предвидеть возможный ответ, я знаю, что функция filter_var () предлагает более надежное решение, но в данном случае меня интересует регулярное выражение.)

ПРИМЕЧАНИЕ. Это теоретический вопрос о PHP-образе регулярного выражения, а не о практическом вопросе о проверке электронной почты. Я просто хочу определить ограничения того, что разумно возможно с помощью регулярного выражения в этом случае.

Заранее спасибо!

Использование регулярного выражения для проверки электронной почты сложно

Попробуйте ввести следующее письмо в качестве своего регулярного выражения: ^[\w.-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$

abc@b...com

Подробнее о проверке регулярных выражений по электронной почте вы можете узнать по адресу http://www.regular-expressions.info/email.html.

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

Спецификация адреса электронной почты довольно гад. Есть регулярное выражение, которое может сделать полную проверку для него, но они тысячи символов. Возможно, лучше разобрать его самостоятельно, но PHP имеет встроенный валидатор для адресов электронной почты:

 filter_var($email, FILTER_VALIDATE_EMAIL); 

РЕДАКТИРОВАТЬ:

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

 "explosion-pills"@aysites.com