2011-03-17 7 views
14

yo sepa sólo hay una vulnerabilidad dentro de los encabezados de un correo electrónico al utilizar datos de usuario correcto?¿Hay alguna vulnerabilidad de inyección en el cuerpo de un correo electrónico?

Estoy utilizando la función siguiente para desinfectar mis datos, sin embargo, tengo algunos campos textarea en la página & por lo tanto, estos pueden contener saltos de línea ... por lo que me pregunto si los datos del usuario solo se pondrán en el cuerpo del correo electrónico, ¿no puede molestarse en ser desinfectado, aparte de pelar html, por supuesto?

Aquí es la función:

function is_injected($str) { 

    $injections = array('(\n+)', 
    '(\r+)', 
    '(\t+)', 
    '(%0A+)', 
    '(%0D+)', 
    '(%08+)', 
    '(%09+)' 
    ); 

    $inject = join('|', $injections); 
    $inject = "/$inject/i"; 

    if (preg_match($inject,$str)) { 
     return true; 
    } else { 
     return false; 
    } 

} 

Como nota al margen, sorprende que no era actualmente una etiqueta para inyección mail/correo electrónico de la inyección.

+0

¿Está la visualización de datos desde el correo electrónico en la página, o hacer un formulario que permite enviar uno? – Fluffy

+0

No ... haciendo un formulario para enviar un correo electrónico. :) – Brett

Respuesta

10

Hay una posible inyección en el cuerpo del texto si usted está hablando SMTP nativo al servidor de correo.

Una sola . en su propio cuerpo termina la corriente en SMTP, por lo que, en teoría, que podría tener suministrada por el usuario de entrada de la siguiente manera:

some body text 
. 
MAIL FROM: <...> 
RCPT TO: <...> 
DATA 
Subject: here's some spam 

here's a new body 

y el servidor SMTP podría permitir que el segundo mensaje a través.

Algunos servidores SMTP pueden configurarse para evitar esto al no permitir que los comandos SMTP para ser canalizada (es decir, que requiere el cliente para leer la respuesta antes de permitir que el siguiente comando).

+0

Entonces, ¿qué debería estar buscando? una línea con un solo "." ¿en eso? – Brett

+0

@Brett - Sí. Si se encuentra, ISTR que la convención es para reemplazarlo con dos puntos. – Alnitak

+0

Ok gracias! :) – Brett

4

Si el correo electrónico es un correo HTML, y particularmente si el receptor lo va a ver en un correo electrónico basado en la web (Hotmail, Gmail, Yahoo, etc.) o un cliente de correo electrónico compatible con HTML, en el cuerpo es definitivamente una preocupación - XSS puede ocurrir en cualquier lugar.

+0

La mayoría de los clientes no permitirán que se incluyan elementos como javascript/flash/css, por lo que, en lo que respecta a la visualización de correos electrónicos en clientes remotos, no existe ninguna amenaza. – Dunhamzzz

+0

La mayoría de los clientes de correo electrónico afirman que no lo permitirán, pero ¿realmente desea depender de la competencia grupal de Hotmail/Yahoo/Gmail para detectar todas las formas posibles de incluir contenido hostil? Siempre hay otro agujero. –

+0

Entonces, ¿qué sugieres para contrarrestar esto? – Brett

3

Algo que también podría suceder es el cambio dinámico MIME. El hecho de enviar el correo que generalmente definimos el tipo de contenido en nuestro guión, ejemplo:

Content-type: text/html;charset=UTF-8 

El problema es - "Content-Type" de cabecera se puede volver a definirse como multipart/mixed (o varias partes/alternativo o de varias partes/relacionado), a pesar de que fue previamente definido.

Ejemplo - imaginar que alguien escribe esto en el campo cuerpo del correo electrónico en su página de contacto:

[email protected]%0AContent-Type:multipart/mixed;%20boundary=frog;%0A--frog%0AContent-Type:text/html%0A%0AMy%20Message.%0A--frog-- 

Lo que esto hará - cuando el usuario recibe este mensaje, solo verá el mensaje del spammer (el que está delimitada por "--frog"), según mimo multiparte/especificación mixta. El mensaje de "contacto" original que el desarrollador tal vez codificó, también estará dentro del correo electrónico, pero no se mostrará al destinatario.

esta manera los spammers pueden enviar correo no deseado de los dominios de otras personas. Especialmente si se trata de una especie de: "enviarlo a su amigo." formar.

también - al filtrar los encabezados de correo, yo uso (un poco más corto que supongo que lo que tiene allí):

preg_replace('/\s+/', "", $text) 
0

También puede inyectar límite MIME en mensajes de varias partes, si el límite no es al azar. De esta forma, puede inyectar contenido arbitrario (por ejemplo, adjuntos con malware).

Ejemplo (no directamente relacionadas con correo electrónico, pero aún así): https://bugzilla.mozilla.org/show_bug.cgi?id=600464

Cuestiones relacionadas