Pregunta

¿Hay algún problema con lo que estoy haciendo aquí? Esta es la primera vez que lidiar con algo como esto, y sólo quiero para asegurarse de que entiende todos los riesgos, etc., a diferentes métodos.

Estoy usando armas de destrucción masiva para obtener la entrada del usuario, y yo estoy mostrando con un control literal. Dado que es una vez entró en la Primera no editable va a almacenar el código HTML y no el de rebajas,

input = Server.HTMLEncode(stringThatComesFromWMDTextArea)

Y a continuación, ejecutar algo como lo siguiente para las etiquetas que desea que los usuarios sean capaces de utilizar.

// Unescape whitelisted tags.
string output = input.Replace("&lt;b&gt;", "<b>").Replace("&lt;/b&gt;", "</b>")
                     .Replace("&lt;i&gt;", "<i>").Replace("&lt;/i&gt;", "</i>");

Editar Esto es lo que estoy haciendo actualmente:

 public static string EncodeAndWhitelist(string html)
 {
     string[] whiteList = { "b", "i", "strong", "img", "ul", "li" };
     string encodedHTML = HttpUtility.HtmlEncode(html);
     foreach (string wl in whiteList)
         encodedHTML = encodedHTML.Replace("&lt;" + wl + "&gt;", "<" + wl + ">").Replace("&lt;/" + wl + "&gt;", "</" + wl + ">");
     return encodedHTML;
 }
  1. Will lo que estoy haciendo aquí me mantenga protegido de XSS ?
  2. ¿Hay otras consideraciones que debe ser hecho?
  3. ¿Hay una buena lista de lo normal etiquetas a la lista blanca?
¿Fue útil?

Solución

Si sus requisitos son que realmente básico que se puede hacer este tipo de reemplazo de cadena sencilla, entonces sí, esto es ‘seguro’ contra XSS. (Sin embargo, todavía es posible presentar el contenido no bien formado donde <i> y <b> son mis-anidados o no cerradas, lo que podría potencialmente estropear la página de los extremos de contenido hasta insertado en.)

Sin embargo, esto no suele ser suficiente. Por ejemplo actualmente no se permite <a href="..."> o <img src="..." />. Si desea permitir estas u otras marcas con los valores de atributo en, tendría un todo mucho más trabajo que hacer. A continuación, puede acercarse a ella con expresiones regulares, pero que le da un sinfín de problemas con la anidación accidentales y la sustitución de los contenidos ya reemplazado-, viendo como expresiones regulares no pueden analizar HTML, y que.

Para resolver ambos problemas, el enfoque habitual es utilizar un [X] [MT] ML analizador en la entrada, y luego caminar el DOM eliminación de todas, pero conocido buenos elementos y atributos, y finalmente re-serializar a [X] HTML. El resultado es entonces garantizada bien formada y contiene contenido sólo es seguro.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top