c# html-sanitizing antixsslibrary

¿Cómo usar C#para desinfectar la entrada en una página html?



html-sanitizing antixsslibrary (6)

¿Hay una biblioteca o un método aceptable para desinfectar la entrada a una página html?

En este caso, tengo un formulario con solo un nombre, número de teléfono y dirección de correo electrónico.

El código debe ser C #.

Por ejemplo:

"<script src=''bobs.js''>John Doe</script>" debería convertirse en "John Doe"




Esta es una pregunta anterior, pero aún relevante.

Estamos utilizando la biblioteca HtmlSanitizer .Net, que:

También en NuGet


Parece que tiene usuarios que envían contenido, pero no puede confiar plenamente en ellos y, sin embargo, aún desea presentar el contenido que proporcionan como un código HTML extremadamente seguro. Aquí hay tres técnicas: HTML codifica todo, HTML codifica y / o elimina solo las partes malvadas, o utiliza una DSL que compila en HTML con la que te sientes cómodo.

  1. ¿Debería convertirse en "John Doe"? Yo codificaría HTML esa cadena y le permitiría al usuario, "John Doe" (si es que ese es su verdadero nombre ...), tener el estúpido nombre <script src=''bobs.js''>John Doe</script> . No debería haber incluido su nombre en etiquetas de guiones o etiquetas en primer lugar. Este es el enfoque que uso en todos los casos a menos que exista un buen caso comercial para una de las otras técnicas.

  2. Acepte HTML del usuario y desinféctelo (en el resultado) utilizando un enfoque de lista blanca como el método de desinfección mencionado por @Bryant. Hacer esto bien es (extremadamente) difícil, y difiero en llevarlo a mentes más grandes. Tenga en cuenta que algunos desinfectantes codificarán HTML mal donde otros habrían eliminado completamente los bits ofensivos.

  3. Otro enfoque es usar una DSL que "compila" en HTML. Asegúrate de whitehat tu compilador DSL porque algunos (como MarkdownSharp ) permitirán HTML arbitrario como etiquetas <script> y atributos malignos sin codificar (lo que por cierto es perfectamente razonable pero puede no ser lo que necesitas o esperas). Si ese es el caso, deberá usar la técnica n. ° 2 y desinfectar los resultados de su compilador.

Pensamientos de cierre:


Según el comentario que hizo a esta respuesta, puede encontrar información útil en esta pregunta:
https://.com/questions/72394/what-should-a-developer-know-before-building-a-public-web-site

Aquí hay un ejemplo de consulta parametrizada. En lugar de esto:

string sql = "UPDATE UserRecord SET FirstName=''" + txtFirstName.Text + "'' WHERE UserID=" + UserID;

Hacer esto:

SqlCommand cmd = new SqlCommand("UPDATE UserRecord SET FirstName= @FirstName WHERE UserID= @UserID"); cmd.Parameters.Add("@FirstName", SqlDbType.VarChar, 50).Value = txtFirstName.Text; cmd.Parameters.Add("@UserID", SqlDbType.Integer).Value = UserID;

Editar: Como no hubo inyección, eliminé la parte de la respuesta relacionada con eso. Dejé el ejemplo de consulta parametrizada básica, ya que puede ser útil para cualquier persona que lea la pregunta.
--Joel


Si por desinfección se entiende eliminar REMOVE las etiquetas por completo, el ejemplo de RegEx al que hace referencia Bryant es el tipo de solución que desea.

Si solo quiere asegurarse de que el código NO se meta con su diseño y lo represente al usuario. ¡Puedes usar el método HttpUtility.HtmlEncode para evitar eso!