2011-01-29 13 views
10

Dado un formulario de contacto que acepta la entrada de usuario personalizada (por ejemplo, dirección, asunto, mensaje), ¿cuáles son algunas de las implicaciones de seguridad y "errores" a tener en cuenta?Correo de PHP(): ¿Cuáles son los posibles problemas a tener en cuenta?

Como mínimo, la dirección de correo electrónico del usuario tendrá que ser validada (probablemente usando filter_var() o equivalente). Por lo que he leído, esto también debería evitar que se inserten encabezados adicionales en el script.

¿Qué pasa con la línea de asunto y el contenido del mensaje? ¿Se requiere saneamiento para esos campos? Me imagino que un cliente de correo electrónico evitaría que cosas como las secuencias de comandos se ejecuten automáticamente, y no estoy particularmente preocupado por cosas como etiquetas HTML (si alguien quiere dedicar tiempo a diseñar un correo electrónico a mano, esa es su prerrogativa, simplemente no lo haré). estar viendo esto: P). Si el saneamiento es requerido, ¿cuál es la mejor manera de hacerlo sin ser demasiado intrusivo (es decir, manteniendo la naturaleza del correo electrónico igual)?

+0

posible duplicado de [¿Por qué no debería usar la función de correo de PHP()?] (Http://stackoverflow.com/questions/4565066/why-shouldnt-i-use-phps-mail-function) –

+2

@Rafe realmente no, creo El OP pregunta específicamente sobre el saneamiento, que el embaucador no aborda –

+0

Sin embargo, ese hilo despertó mi interés. Nunca he encontrado la necesidad de utilizar la función mail() antes y sospeché que las cosas se podrían desorganizar muy rápidamente. : P – Illianthe

Respuesta

4

Asegúrese de que las personas no puedan inyectar saltos de línea en cualquier cosa que no sea el cuerpo. Además, convierta al destinatario estático y nunca lo pase, p. a través de un campo de forma oculta. Sin embargo, agregar dicho campo no es una mala idea; pero bloquea el IP si no está configurado para el valor esperado, entonces tu cliente probablemente sea un bot de spam.

+0

+1 muy buen consejo – alex

+0

¿Está seguro de que los saltos de línea no son seguros en los campos Asunto y Asunto? ¿Alguna referencia? – user1318499

+0

Los saltos de línea se convierten a espacios hoy en día, pero antes de 5.1.2 ese no era el caso. De todos modos, si alguien inyecta encabezados, probablemente sea un spammer. Desea detectar esto para que no envíe spam a quien sea el destinatario legítimo del correo electrónico. – ThiefMaster

7

Si está utilizando el cuarto argumento, los títulos opcionales, velan por la inserción de cabeceras adicionales, si se está haciendo algo como esto ...

mail($to, $subject, $message, 'From: $email'); 

Si $email proviene de la entrada del usuario y no es verificada , un usuario podría introducir algo como ...

\n\rCC:[email protected]

esto se puede evitar mediante la filtración de \n y \r, o validar $email usando la función filter_var($email, FILTER_VALIDATE_EMAIL).

+0

Pero debido a que estos errores no son triviales, es mucho más seguro dejar que una biblioteca se ocupe de eso que ya haya pensado en tales cosas. – DGM

Cuestiones relacionadas