php regex preg-match user-input code-injection

php - ¿Es seguro usar RegEx del usuario?



preg-match user-input (2)

Quiero agregar una función a mi sitio web para que los usuarios puedan buscar los textos con RegEx . Pero, ¿es seguro dejar que los usuarios hagan algo así?

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


Existe un posible ataque a este código denominado ataque de denegación (Denegación de servicio de expresiones regulares).

La Denegación de Servicio de Expresión Regular (ReDoS) es un ataque de Denegación de Servicio, que explota el hecho de que la mayoría de las implementaciones de Expresión Regular pueden alcanzar situaciones extremas que hacen que funcionen muy lentamente (exponencialmente relacionadas con el tamaño de entrada). Un atacante puede hacer que un programa que usa una Expresión regular ingrese a estas situaciones extremas y luego se cuelgue por un tiempo muy largo.

Específicamente con preg_match hay un problema conocido que puede causar un error de segmentación de PHP.

Entonces la respuesta es no, no es segura debido a problemas como estos.


Por lo que respecta a la seguridad, nunca debe confiar en la entrada del usuario, por lo que depende de lo que haga con la entrada. En su caso dado, al menos debe escapar del delimitador usado (barra invertida) en la entrada del usuario para asegurarse de que la expresión regular funcione.