来自形式的危险请求 - 如何避免

时间:2011-03-03 14:47:53

标签: c# .net jquery html asp.net-mvc-2

我正在尝试将我的网页正文发送到一个操作方法,这样我就可以将其保存为字符串,然后将其部分从网站的其他部分呈现。我这样发送:

var input = 
            {
                id : GetGUIDValue(),
                html : $("body").html(),
                type : 'exposure'
            }
        $.ajax({
            type: "POST",
            url: "<%= Url.Action("SaveAnalysis", "Indications") %>",
            data: input,
            success:function(data)
            {

            }
        });

我抬起头找到了这个并将其添加到我的页面开场陈述中:

ValidateRequest="false"

表示会关闭它,但事实并非如此。这是MVC2中的一个视图,所以也许有另一种方法可以做到这一点?如果没有..我可以将我的页面的主体html发送给动作,这样我就可以将该字符串保存在变量中。

谢谢!

编辑:

行动守则:

public ActionResult SaveAnalysis(Guid? id, string html, string type)
        {
            IndicationBase indication = CachedTransactionManager<IndicationBase>.GetCachedTransactions(id.Value);
            if (type == "Exposure")
            {
                indication.Model.ExposureExport = html;
            }
            else if (type == "Prepayment")
            {
                indication.Model.PrepaymentExport = html;
            }
            return Json("");
        }

3 个答案:

答案 0 :(得分:0)

使用[ValidateInput(false)]

装饰您的操作方法

答案 1 :(得分:0)

你在.NET 4.0上运行吗?如果是这样,您需要将requestValidationMode设置为2.0。 Rick Strahl在他的博客上有一个good article。基本上,您需要执行以下操作:

在web.config中设置requestValidationMode

<httpRuntime requestValidationMode="2.0" />

使用[ValidateInput(false)]

装饰您的行动

答案 2 :(得分:0)

您需要使用javascript转义请求:

http://www.w3schools.com/jsref/jsref_escape.asp

在C#端,您可以使用HTML Encode / Decode进行存储和重新渲染。问题在于注入攻击,因此只要你允许html以纯文本形式传递,C#就会大喊大叫。当您意识到自己将处理HTML时,应始终对其进行编码,然后再将其发送给控制器。

〜Vulgarbinary

编辑以添加新语法:

var input = 
            {
                id : GetGUIDValue(),
                html : escape($("body").html()),
                type : 'exposure'
            }
        $.ajax({
            type: "POST",
            url: "<%= Url.Action("SaveAnalysis", "Indications") %>",
            data: input,
            success:function(data)
            {

            }
        });

另一个编辑:

来自: http://kseesharp.blogspot.com/2008/01/c-equivalent-of-javascript-escape.html

Microsoft.JScript.GlobalObject.unescape("KC%27s%20trick%20/Hello")将取消你的字符串。很抱歉延迟必须深入了解我之前的示例,看看完整的unescape语法是什么。