Можно ли использовать RegEx пользователя?

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

 preg_match('/' . $user_input_regex . '/', $subject); 

Related of "Можно ли использовать RegEx пользователя?"

Существует возможная атака на этот код, называемый атакой ReDoS (регулярное выражение «Отказ в обслуживании»).

Регулярное выражение «Отказ в обслуживании» (ReDoS) – это атака «Отказ в обслуживании», которая использует тот факт, что большинство реализаций регулярных выражений могут достигать экстремальных ситуаций, которые заставляют их работать очень медленно (экспоненциально связанные с размером ввода). Затем злоумышленник может вызвать программу с использованием регулярного выражения, чтобы войти в эти экстремальные ситуации, а затем повесить в течение очень долгого времени.

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

Таким образом, ответ отрицательный, он небезопасен из-за таких проблем.

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