Una solicitud potencialmente peligrosa carga la página

0

He alojado una aplicación en formularios web ASP.NET 4.0.

Cuando estoy navegando hostname/DressDetail.aspx?<script>alert(313)</script>&category=1&code=76 , aparece un mensaje de error como:

  

Se detectó un valor Request.QueryString potencialmente peligroso desde el cliente (="alert(313)

Estoy esperando el mismo mensaje de error que el de arriba cuando estoy navegando hostname/DressDetail.aspx?<script>alert(313)</script>=1&category=1&code=76 , pero carga la página. La única diferencia es un =1 extra en la última url.

    
pregunta Hrishikesh T T 11.04.2018 - 07:52
fuente

1 respuesta

0

Analicemos lo que está sucediendo aquí observando el código de formularios web de ASP.NET.

Primer ejemplo, sin / co =1

  

[HttpRequestValidationException (0x80004005): se detectó un valor Request.QueryString potencialmente peligroso del cliente (= "alert (1) c__DisplayClass280_0.b__0 (clave de cadena, valor de cadena) +22      System.Web.HttpValueCollection.EnsureKeyValidated (String key) +9904693      System.Web.HttpValueCollection.GetValues (nombre de cadena) +17      System.Web.UI.Page.DeterminePostBackMode () +99

Si ejecutamos el código, podemos ver que la excepción se origina en EnsureKeyValidated pero podemos llegar allí desde GetValues , desde DeterminePostBackMode . Así que si chequeas ahí vemos esto:

      string[] values = nameValueCollection.GetValues((string) null);

para que parezca que lo que obtenemos aquí es recuperar todos los valores sin clave. Por lo tanto, la consulta anterior se puede volver a escribir en el formulario null=<script>alert(313)</script>& . Por lo tanto, la secuencia de comandos se pasa a ser el valor para una clave nula / vacía .

Segundo ejemplo, w / =1

Aquí, estás haciendo que la clave sea igual a la secuencia de comandos, y el valor para que esa clave sea 1. Las claves se codifican antes de que se pasen al servidor, por lo que esto no sería un problema.

Sideseareplicarelerror,podríapasara=<script>alert(313)</script>yobtendríaelmismoerrorqueseoriginóenunlugardiferente:

  

[HttpRequestValidationException(0x80004005):sedetectóunvalorRequest.QueryStringpotencialmentepeligrosodelcliente(a="alert (1) c__DisplayClass280_0.b__0 (clave de cadena, valor de cadena) +22      System.Web.HttpValueCollection.EnsureKeyValidated (String key) +9904693      System.Web.HttpValueCollection.GetValues (índice Int32) +29      System.Web.HttpValueCollection.ToString (urlencodificado Boolean, claves de exclusión de IDictionary) +206      System.Web.UI.Page.get_ClientQueryString () +411

Si necesita, puede controlar lo que se está denegado .

    
respondido por el Paweł Łukasik 11.04.2018 - 11:54
fuente

Lea otras preguntas en las etiquetas