2011-09-26 32 views
7

Estoy generando algo de HTML y quiero generar un enlace mailto de seguridad de contenido de base de datos XSS. ¿Cuál es la codificación adecuada para usar aquí? ¿Cómo es esto?¿Cómo codifico correctamente un enlace de mailto?

myLiteral.Text = string.Format(
    "mailto:{0}?Content-Type=text/html&Subject={1}&body={2}", 
    HttpUtility.UrlEncode(email_address), 
    HttpUtility.UrlEncode(subject), 
    HttpUtility.UrlEncode(body_message)); 

¿Debo usar UrlEncode aquí? HtmlEncode? Haz lo que hice, entonces HtmlEncode la totalidad? Estoy escribiendo HTML de una URL, así que estoy un poco confuso ...

@Quentin, ¿es esto lo que describes? (Cambiado & s a & ya que estoy a punto de HtmlEncode ...)

myLiteral.Text = 
    HttpUtility.HtmlEncode(HttpUtility.UrlEncode(
    string.Format(
     "mailto:{0}?Content-Type=text/html&Subject={1}&body={2}", 
     email_address, subject, body_message))); 
+0

Su primera versión es casi correcta, excepto que debe descodificar el '&' s. Lo está asignando a la propiedad Text. Debería ocuparse de la codificación HTML internamente. Lo único de lo que debe preocuparse es que sea un URI válido. –

+1

@ liho1eye: Creo que eso solo es cierto para ASP Literal if myLiteral.Mode == Encode, que no es el predeterminado. Pero la segunda versión debería tener el efecto que buscabas, ¿sí? –

Respuesta

6

Usted está poniendo algo de contenido en una dirección URL, a continuación, que representa esa URL en HTML. Así que URLEncode y luego HTMLEncode lo que obtienes de URLEncode.

+0

Lo intenté ... ¿es la segunda versión del código en mi pregunta lo que tenía en mente? –

+0

Iría con el primero. O una mezcla de los dos. Htmlattributeencodificando el valor completo, y url codificando los valores insertados en la url – Erlend

+0

@Yuck - Realmente es una respuesta. La segunda oración describe exactamente lo que se necesita hacer. – Quentin

Cuestiones relacionadas