2011-05-07 19 views
20

He creado un nuevo sitio ASP.NET MVC 3/.NET Framework 4.0 utilizando la plantilla "Aplicación de Internet". Utilicé Nuget para instalar el paquete Windows Azure Web Role (MVC3) y luego seguí el Access Control Service walkthrough para configurar Windows Live ID y la autenticación de Google.¿Por qué me aparece el error "Se detectó un valor de Request.Form potencialmente peligroso desde el cliente"?

Pronto me encontré con el error "Se detectó un valor Request.Form potencialmente peligroso desde el cliente" y seguí el article in the Windows Identity Foundation wiki para intentar resolverlo. Por desgracia, nada de lo que he intentado obras, entre ellas:

  • Configuración <httpRuntime requestValidationMode="2.0"/> y <pages validateRequest="false"> tanto en la raíz web.config y vistas \ web.config

  • copia SampleRequestValidator desde el SDK de WIF en el proyecto y entorno <httpRuntime requestValidationType="SampleRequestValidator"/> tanto en web.configs

también he intentado variaciones de los mismos sin éxito.

¿Alguna idea?

Aquí está la excepción completa:


Detalles de la excepción: System.Web.HttpRequestValidationException: se detectó un valor de Request.Form potencialmente peligroso desde el cliente (wresult = "<t:RequestSecurityTo...").

Descripción: La validación de solicitudes ha detectado un valor de entrada de cliente potencialmente peligroso y se ha cancelado el procesamiento de la solicitud. Este valor puede indicar un intento de comprometer la seguridad de su aplicación, como un ataque de scripts entre sitios. Para permitir que las páginas anulen la configuración de validación de solicitud, configure el atributo requestValidationMode en la sección de configuración httpRuntime para requestValidationMode = "2.0". Ejemplo: <httpRuntime requestValidationMode="2.0" />. Después de establecer este valor, puede deshabilitar la validación de solicitud configurando validateRequest = "false" en la directiva de la página o en la sección de configuración <pages>. Sin embargo, se recomienda enfáticamente que su aplicación verifique todas las entradas en este caso. Para obtener más información, consulte http://go.microsoft.com/fwlink/?LinkId=153133.

Seguimiento de la pila:

[HttpRequestValidationException (0x80004005): Un valor Request.Form potencialmente peligroso se detectó desde el cliente (wresult = "<t:RequestSecurityTo...").]

 
System.Web.HttpRequest.ValidateString(String value, String collectionKey, RequestValidationSource requestCollection) +8755668 
System.Web.HttpRequest.ValidateNameValueCollection(NameValueCollection nvc, RequestValidationSource requestCollection) +122 
System.Web.HttpRequest.get_Form() +114 
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.IsSignInResponse(HttpRequest request) +75 
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request, Boolean onPage) +205 
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.CanReadSignInResponse(HttpRequest request) +41 
Microsoft.IdentityModel.Web.WSFederationAuthenticationModule.OnAuthenticateRequest(Object sender, EventArgs args) +117 
System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +148 
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75 

Respuesta

-1

No he podido encontrar la razón técnica por la que esto no funciona. Sin embargo, desde la perspectiva de los requisitos del negocio, esta es la muestra incorrecta para basar mi solución particular porque solicita autenticación antes de que se pueda acceder a todas las páginas. Sin embargo, el acceso a la página de inicio debe ser anónimo para que se pueda usar el botón "Iniciar sesión".

En su lugar encontré el MVC3 Custom Login Sample que cumple con estos requisitos y funciona.

18

Puede intentar decorar la acción del controlador en la que está publicando (y la que arroja esta excepción) con el atributo [ValidateInput(false)] (dejando <httpRuntime requestValidationMode="2.0"/> en web.config).

+0

Sin suerte. La excepción parece estar ocurriendo antes de presionar el controlador. Actualizaré la pregunta con el seguimiento de la pila. –

0

A primera vista, parece un error en la biblioteca de Azure Mvc3. MVC 3 expone API especiales que le permiten recuperar valores no validados de la colección de Formularios, pero parece que el módulo no los está utilizando.

2

Primero - estrecho de donde viene esto.Usa el violín para investigar qué campo está causando el problema. Elementos tan simples como: < s causarán este error cuando se publiquen sin codificarse. También es posible que desee decorar su MODELO con el atributo [AllowHtml] y tratar de no habilitar la codificación 2.0, es un poco peligroso.

2

Copia SampleRequestValidator desde el SDK de WIF en el proyecto y puesta en tanto web.configs

Esto debe solucionarlo. ¿Puedes verificar que el código realmente se está ejecutando? Si coloca un punto de interrupción en el validador de solicitud, ¿golpea?

Supongo que puso <httpRuntime...> en <system.web> ¿verdad?

+0

Hay un paquete NuGet para el Validador de solicitud WIF http://nuget.org/packages/WifRequestValidator/ – webwires

16

Tuve el mismo problema.

Aquí es un ejemplo de mi solución:

[ValidateInput(false)] 

    public ActionResult *YourMethodName*(FormCollection forms) 
    { 
      // Encoded String 
      string EncodedValue = Server.HtmlEncode(forms[*name or index*]); 

     // Normal String 
     string value = forms[*name or index*] 

     //.... 
    } 

No es necesario nada en su webconfig.

1

Me encontré con este problema al recorrer el tutorial "Inicio de sesión único de Active Directory a una aplicación Windows Azure". En mi caso, el problema era que inadvertidamente había colocado el valor <httpRuntime ... /> en la sección equivocada <system.web /> en mi archivo web.config (no lo noté originalmente, pero hay una nueva sección <location> con una ruta de "FederationMetadata" que también contiene system.web). El valor debe colocarse en la sección de nivel superior <system.web>.

13

Escribí una pequeña nota de blog sobre esto aquí: http://erikbra.wordpress.com/2012/04/17/wif-saml-token-post-and-requestvalidationmode2-0/. No es necesario desactivar la validación de solicitudes o establecerlo en 2.0 para todo el sitio.

En resumen, solo necesita modificar el modo requestValidationMode a 2.0 en la URL específica a la que WIF envía el token SAML. Esto se puede hacer con un elemento (ver localización del elemento (Ajustes ASP.NET esquema) para más detalles) en su web.config, así:

<location path="WIFHandler"> 
    <system.web> 
    <httpRuntime requestValidationMode="2.0" /> 
    </system.web> 
</location> 

La ubicación “WIFHandler” no tiene por qué existir en su aplicación , como WIF atajará la tubería antes de que ASP.NET intente manejar la solicitud, y lo redireccionará a la url de retorno (ru en el parámetro wctx de la POST del token SAML).

En su sección de configuración WIF del archivo web.config, asegúrese de que coincida con el parámetro “responder” con la ubicación donde se configura el modo de validación de solicitudes a modo de 2.0:

<microsoft.identityModel> 
    <service> 
     <federatedAuthentication> 
     <wsFederation passiveRedirectEnabled="true" 
         issuer="https://localhost/STS/" 
         realm="https://localhost/MyApp/" 
         reply="https://localhost/MyApp/WIFHandler/" /> 

(...) 
+1

Funcionó para mí. Yo recomendaría poner la respuesta completa aquí en lugar de redirigir la respuesta a su sitio web para obtener más detalles. –

+0

FYI, la respuesta completa ahora está inserta aquí :) –

2

no veo cualquier respuesta aquí mencione esto. así que aquí va.

Además de "[ValidateInput (false)]", en su aspx, es posible que necesite agregar esto a su <% @ Page ...>

<%@ Page ValidateRequest="false"> 

Esto permitiría deshabilitar la validación de solicitud por página en lugar de toda la aplicación web.

+0

100% de acuerdo, esto es absolutamente necesario + esto está limpio ya que la validación de solicitud se descarta solo para la página en cuestión y no para todo el sitio. ¡Gracias por compartir! –

Cuestiones relacionadas