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.