Explotar en bash script parámetro posible?


9

Quiero pasar una dirección de correo electrónico de un formulario web a un script bash. Estoy usando la siguiente expresión regular:

/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,4}/

¿Es esto suficiente? ¿O podría uno incrustar una hazaña?

El script se llama desde PHP:

system('/usr/local/bin/script.sh "$email"');

44
Bien hecho incluso por preguntar. No veo ningún potencial de explotación, pero puede rechazar algunas direcciones de correo electrónico válidas y aceptar algunas inválidas. Ah, y deberías anclar tu expresión regular .
Comodín

1
@Wildcard De hecho, la falta de anclaje hace que la expresión regular sea inútil como prueba de seguridad.
Gilles 'SO- deja de ser malvado'

Esta podría ser una dirección de correo electrónico válida "the doctor"@gallifrey.com. Tenga en cuenta el espacio citado en el componente de nombre de usuario.
roaima

¿En qué momento te preocupa una hazaña? La línea de asunto dice 'bash', por lo que es la preocupación por la expansión al pasar $ email como argumento (citado) a script.sh, o el manejo de script.sh del valor pasado, o la rigurosidad del (presumiblemente basado en PHP ) regex, o ???
Jeff Schaller

No está claro cómo se usa la expresión regular dentro de su script. Para un buen análisis, proporcione las partes relevantes de su secuencia de comandos.
jofel

Respuestas:


1

Puede desinfectar y validar la dirección de correo electrónico en PHP, que será más rápido y seguro que llamar a un script de shell. Llamar a un script de shell con datos no saneados desde un servicio web simplemente agregará otra cosa que puede romperse.

$sanitized_email = filter_var($email, FILTER_SANITIZE_EMAIL);
if (filter_var($sanitized_email, FILTER_VALIDATE_EMAIL)) {
    echo "This sanitized email address is considered valid.\n";
    echo "Before: $email\n";
    echo "After:  $sanitized_email\n";    
} else {
    echo "This sanitized email address is considered invalid.\n";
}

Ejemplo anterior adaptado de ejemplos en el sitio PHP.net .

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.