PHP - регулярное выражение отказа в обслуживании

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

if (preg_match("/^attachment; filename=\"".$_GET['get_part']."\"$/",$part['Content-Disposition']))  

Они дали следующее объяснение:

There is a vulnerability in implementations of regular expression evaluators and related methods that can cause the thread to hang when evaluating repeating and alternating overlapping of nested and repeated regex groups. This defect can be used to execute a Denial of Service (DoS) attack.

Не существует известных реализаций регулярных выражений, защищенных от этой уязвимости.

Как от этого избавиться?

when evaluating repeating and alternating overlapping of nested and repeated regex groups Ага, что бы с этой деталью потом $_GET['get_part'] а?
user557597 24.07.2018 02:20

Попробуйте построить строку перед ее отправкой в ​​preg_match().

user557597 24.07.2018 02:21

Вероятно, они не хотят, чтобы вы создавали регулярное выражение динамичный.

user557597 24.07.2018 02:24

Не могли бы вы привести мне пример, поскольку я не понимаю, как это сделать.

jalpesh 24.07.2018 02:36
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
139
1

Ответы 1

Не следует использовать вводимые пользователем данные напрямую как часть регулярного выражения. Используйте preg_quote(), чтобы избежать его, чтобы он соответствовал ему буквально.

if (preg_match("/^attachment; filename=\"".preg_quote($_GET['get_part'], '/')."\"$/",$part['Content-Disposition']))

3 голоса за, но никто не заметил, что в PHP нет функции preg_escape.

revo 24.07.2018 06:46

Другие вопросы по теме