La validación de la solicitud de marco 4.0 no permitirá el código subyacente en los cuadros de texto de htmlencode [cerrado]

Tengo un formulario en el que he estado recibiendo envíos que tienen signos de puntuación y caracteres especiales que desencadenan el error de valor Request.Form potencialmente peligroso. He estado intentando usar el método httpUtility.htmlencode y Server.htmlencode para desinfectar cuadros de texto y áreas de texto.

Todas mis pruebas no se activan porque la validación de solicitud incorporada del marco 4.0 evita que el código subyacente se ejecute para realizar la desinfección. He incluido ValidateRequest en el encabezado de la página, pero no importa lo que establezca, todavía hace lo mismo.

Este es el código que tengo hasta ahora.

Session("RequestID") = Server.HtmlEncode(txtRequestID.Value)
Session("FirstName") = Server.HtmlEncode(txtInstFirstName.Text)
Session("LastName") = Server.HtmlEncode(txtInstLastName.Text)
Session("CNumber") = Server.HtmlEncode(txtCNumber.Text)
Session("Email") = Server.HtmlEncode(txtInstEmail.Text)
Session("Phone") = Server.HtmlEncode(txtInstPhone.Text)
Session("Department") = ddlDept.SelectedValue
Session("Location") = ddlLocation.SelectedValue

Eso no funcionó, así que probé esto:

Session("FirstName") = QuoteString(Trim(txtInstFirstName.Text))
Dim sanFN As String = Session("FirstName")
Server.HtmlEncode(sanFN)

¿Qué puedo hacer para que esto funcione? Según todos los sitios web que he visitado, debería funcionar.

Gracias, tyler


Desafortunadamente, el proyecto fue descartado y cambiamos a una nueva arquitectura (ruby on rails).

preguntado el 08 de enero de 11 a las 19:01

2 Respuestas

Han cambiado la forma en que funciona la validación de solicitudes en ASP.NET 4.0 para que la directiva de página para desactivarla ya no funcione de forma predeterminada. Tendrá que hacer un cambio en su web.config para que se comporte como se espera. Mira esto pregunta similar por un par de formas en que puede hacerlo.

Puedes leer más detalles en esta página en el sitio ASP.NET.

contestado el 23 de mayo de 17 a las 13:05

Creo que necesitas agregar el validateRequest = "falso", en esta página, o en web.config (en el parámetro de página) para hacerlo global.

<%@ Page validateRequest="false" %>

Más para leer sobre este tema: http://www.asp.net/learn/whitepapers/request-validation

Después de hacer que la validateRequest sea falsa, entonces no hay ningún gran peligro real, pero debe manejar cualquier posible ataque de script en su código, usando htmlEncode cuando renderice el texto de entrada, o haga cualquier otra validación en la publicación antes deje que la entrada se represente en la página.

conocido
¡No use la sesión para mover y guardar los datos de entrada en la página! No es una buena práctica.

Respondido el 08 de enero de 11 a las 23:01

He intentado poner validateRequest = "false" en los parámetros de la página, pero todavía arroja el error de validación de respuesta. No tuve este problema con el marco 3.5. ¿Qué sería así? Mctee155

¿Cuáles serían algunas sugerencias para pasar los datos del formulario a otra página? El formulario envía datos a una página de confirmación para su revisión utilizando cadenas de sesión. no es elegante, pero hizo el trabajo. - Mctee155

@ McTee155 Intente agregarlo a web.config - Aristos

¡Este ha sido el mayor ejercicio de frustración jamás realizado! Lo agregué al archivo web.config e incluso creé un sitio web completamente nuevo para probar un formulario simple y sucede exactamente lo mismo cada vez. He intentado esto ahora en tres servidores diferentes con el mismo resultado. Al menos se envía cuando configuro el marco de destino en 3.5. - Mctee155

@ Mectee155 hiciste algo mal o no entendí el problema. ¿Qué es exactamente el mensaje de error? ¿Ves la pantalla de error de asp.net al enviar? si no, ¿cuándo ves el error? - Aristos

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.