Mi aplicación (basada en Perl) necesita permitir a los usuarios ingresar expresiones regulares, para hacer coincidir varias cadenas detrás de las escenas. Mi plan hasta el momento ha sido tomar la cuerda y lo envuelve en algo así como¿Cómo puedo usar las expresiones regulares de forma segura desde la entrada del usuario?
$regex = eval { qr/$text/ };
if (my $error = [email protected]) {
# mangle $error to extract user-facing message
($text
haber sido despojado de saltos de línea antes de tiempo, ya que es en realidad múltiples expresiones regulares en un campo de texto de varias líneas que yo split
).
¿Existe algún riesgo de seguridad potencial al hacer esto? ¿Alguna entrada extraña que podría llevar a la ejecución de código arbitrario? (Además de las vulnarabilidades de desbordamiento del búfer en los motores de expresiones regulares como CVE-2007-5116). Si es así, ¿hay formas de mitigarlos?
¿Hay una mejor manera de hacerlo? ¿Algún módulo Perl que ayude a abstraer las operaciones de convertir la entrada del usuario en expresiones regulares (como extraer mensajes de error ... o proporcionar modificadores como /i
, que no necesito estrictamente aquí, pero sería bueno)? Busqué CPAN y no encontré mucho que fuera prometedor, pero considero la posibilidad de que me haya perdido algo.
¿Quieres decir como '(? {Code})' tokens? –
¿Has oído hablar de taintperl? – Ether
@Ether: ¿Cómo ayuda la contaminación aquí? Le ayuda a evitar accidentalmente el uso de una entrada no confiable donde podría causar un problema de seguridad. Aquí, estamos buscando una forma de usar de forma segura una expresión regular no confiable. – cjm