2012-04-25 6 views
5

Tengo un i-Frame en mi opinión que vincula a un sitio externo. Este sitio contiene algunos valores y algunos ajustes de configuración. Como parte de estos ajustes de configuración, se encuentra un "CallBackURL". Este sitio web externo publica en este CallBackUrl.MVC 4 - Navaja - "se detectó un valor de request.form potencialmente peligroso desde el cliente"

Especifiqué el CallBackURL como una acción en mi control.

Ver código

<form id="testForm" method="post" target="testFrame"> 
    <input type="hidden" name="RequestXML" ID="RequestXML" value="<Request><RedirectURL>Account/TokenRequest</RedirectURL></Request>" 
</form> 

<iframe id="testFrame" name="testFrame" frameborder="0" style="width:1000px;height:500px"></iframe> 

Código controlador

[HttpPost] 
    [ValidateInput(false)] 
    public ActionResult TokenRequest() 
    { 
    if (Request.Form["ResponseXML"] != null) 
     ViewBag.ResponseXML = Request.Form["ResponseXML"]; 

    return PartialView(); 
    } 

dentro de mi acción del controlador me sale el siguiente error: "Se ha detectado un valor request.form potencialmente peligrosos desde el cliente"

También configuré esto en el webconfig

<httpRuntime requestValidationMode="2.0" /> 
<pages validateRequest="false"... 

¿Qué estoy haciendo mal?

EDIT Estaba editando el archivo web.config incorrecto. Lo estaba agregando al web.config dentro de la carpeta de vistas. Una vez que lo cambié al lugar correcto, comenzó a funcionar.

+0

Es probablemente el antixsser la captura de los paréntesis angulares. Intente Server.HTMLEncode la instrucción Request.Form. –

+0

Lo intenté, no funciona. Todavía obtengo este error: Se detectó un valor Request.Form potencialmente peligroso del cliente (ResponseXML = "

Respuesta

2

Trate de usar un modelo en lugar de simplemente usar el control directo html. y también use el atributo AllowHtml.

Modelo:

public TokenRequestModel 
{ 
    [AllowHtml] 
    public string ResponseXML {get;set;} 
} 

Acción:

[HttpPost] 
public ActionResult TokenRequest(TokenRequestModel model) 
{ 
    if (!string.IsNullOrEmpty(model.ResponseXML)) 
     ViewBag.ResponseXML = model.ResponseXML; 

    return PartialView(); 
} 
+1

esto no parece funcionar en MVC 4 – Schneider

+0

Solución elegante, trabajada en MVC4. Se agregó [AllowHtml] a la propiedad C# que coincide con @ Html.TextAreaFor() en la Vista. Todos los corchetes angulares HTML escritos en este campo ahora se cargan y guardan correctamente. – SushiGuy

19

La solución anterior no estaba trabajando para mí en MVC4. Lo que funciona para mí es solo poner un atributo arriba de la acción. No es necesario cambiar su web.config o agregar el atributo AllowHtml.

[HttpPost] 
[ValidateInput(false)] 
public ActionResult TokenRequest(TokenRequestModel model) 
{ 
    if (!string.IsNullOrEmpty(model.ResponseXML)) 
    ViewBag.ResponseXML = model.ResponseXML; 
    // ... 
+0

Esto funcionó para mí, pero estoy usando sprocs parametrizados para pasar los datos a la base de datos, así que no estoy preocupado por la inyección de SQL, etc .; Sin embargo, supongo que solo querrá advertir a los usuarios que deben proporcionar su propia implementación de validación ... una vez más, no es una preocupación con mi aplicación de intranet y el grupo de usuarios limitado. –

0

Usted puede intentar

[HttpPost] 
    public ActionResult TokenRequest() 
    { 
    if (Request.Unvalidated().Form["ResponseXML"] != null) 
     ViewBag.ResponseXML = Request.Unvalidated().Form["ResponseXML"]; 

    return PartialView(); 
    } 

Creo que el sin validar() hará que el error desaparezca sin la necesidad de editar webconfig

Cuestiones relacionadas