zoukankan      html  css  js  c++  java
  • "从客户端中检测到有潜在危险的 Request.Form 值"的解决方案汇总

    #事故现场
      在一个asp.net 的项目中,前端通过ajax将富文本中的文字内容post到服务端的一个ashx中,在ashx中尝试读取参数值时,

    结果报错:“从客户端中检测到有潜在危险的 Request.Form 值”

    #事故分析
      由于在asp.net中,Request提交时出现有html代码字符串时,程序系统会认为其具有潜在危险的值。会报出“从客户端 中检测到有潜在危险的Request.Form值”这样的Error。

      而富文本中的内容是包含html代码的,所以...

    #解决方案:
    1、前端对富文本字符串进行encodeURI编码,服务端进行HttpUtility.UrlDecode解码操作;
      前端代码:

    var str = '<p><span style="color: #00B0F0;"><em><strong>我想留在你的身边,</strong></em></span><br/></p><p><span style="color: #7030A0;"><strong><span style="text-decoration: underline;">深情款款多么可怜;</span></strong></span></p>';
        $(function() {
            $.ajax({
                type: "post",
                url: "TestHandle.ashx",
                data: { Title: 'jack', Content: encodeURI(str) },
                success: function (data) {
                    $("#div").html(data);
                }
            });
        });

    后端代码:

        public void ProcessRequest(HttpContext context)
        {
            string str = context.Request["content"];
            string content = HttpUtility.UrlDecode(str);
            context.Response.ContentType = "text/plain";
            context.Response.Write(content);
        }

    2、前端不以form的方式提交,直接以json方式提交,服务端从request的body中读取数据,然后反序列化,得到信息;

      前端代码:

        var str = '<p><span style="color: #00B0F0;"><em><strong>我想留在你的身边,</strong></em></span><br/></p><p><span style="color: #7030A0;"><strong><span style="text-decoration: underline;">深情款款多么可怜;</span></strong></span></p>';
        var temp = { Title: 'jack', Content: str };
        $.ajax({
            type: "post",
            url: "TestHandle.ashx",
            contentType:"application/json;charset=utf-8",
            data: JSON.stringify(temp),
            success: function (data) {
                $("#div").html(data);
            }
        });

    后端代码:

        string bodyText;
        using (var bodyReader = new System.IO.StreamReader(context.Request.InputStream))
        {
            bodyText = bodyReader.ReadToEnd();
        }
        dynamic bodyObj = JsonConvert.DeserializeObject(bodyText);
     
        context.Response.ContentType = "text/plain";
        context.Response.Write(bodyObj.Content);

    #其他场景的解决方案:

    1、aspx页面,当前页面进行form提交

      打开当前.aspx页面,页头加上代码:validateRequest=”false”,如:

    <%@ Page Language="C#" ValidateRequest="false" AutoEventWireup="false" CodeFile="default.aspx.cs" Inherits="default" %>

    该方法不推荐,还有一种修改web.config配置文件的方法,强烈不推荐,就不写在这里了;

    2、在ASP.NET MVC中的解决方案

      1)、针对某个实体类的单个字段设置 [AllowHtml] ,这样提交的时候,系统就会放过该字段。

      前端代码:

        var str = '<p><span style="color: #00B0F0;"><em><strong>我想留在你的身边,</strong></em></span><br/></p><p><span style="color: #7030A0;"><strong><span style="text-decoration: underline;">深情款款多么可怜;</span></strong></span></p>';
        $(function () {
            $.ajax({
                type: "post",
                url: "Home/Test",
                data: { Title: 'jack', Content: str },
                success: function (data) {
                    $("#div").html(data.ok);
                }
            });
        });

      后端代码

        public class NewInfo
        {
            public string Title { get; set; }
            [AllowHtml]
            public string Content { get; set; }
        }
    public ActionResult Test(NewInfo info)
    {
          return Json(new { ok = info.Content});
    }

      2)、直接根据当前Action方法不做判断的方法,在Action前加上 [ValidateInput(false)]

      代码如下

    [ValidateInput(false)]
    [HttpPost]
    public ActionResult Edit()
    {
            。。。。
            return Redirect("/product");
    }



    参考原文链接:https://www.cnblogs.com/willingtolove/p/10923895.html

  • 相关阅读:
    C# partial 作用
    C#中internal关键字是什么意思?什么叫做“只能在包含它的程序集中访问该方法”
    [转]利用.NET中的反射机制实现IList到DataTable的转换
    你可能已经知道或者不知道的ASP.NET 2.0技巧
    SQL Server基本函数详细介绍--字符串函数
    在Web.config配置文件中自定义配置节点
    SQL SERVER事务处理
    专用于SqlServer2005的高效分页存储过程(支持多字段任意排序,不要求排序字段唯一)
    SQL SERVER 高效存储过程分页(Max/Min方法)
    该字符串未被识别为有效的 DateTime
  • 原文地址:https://www.cnblogs.com/sky6699/p/15392235.html
Copyright © 2011-2022 走看看