\"从客户端中检测到有潜在危险的 Request.Form 值\"的解决方案汇总

释放双眼,带上耳机,听听看~!

#事故现场

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

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

#事故分析

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

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

#解决方案:

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

  前端代码:

 1     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>\';
 2     $(function() {
 3         $.ajax({
 4             type: \"post\",
 5             url: \"TestHandle.ashx\",
 6             data: { Title: \'jack\', Content: encodeURI(str) },
 7             success: function (data) {
 8                 $(\"#div\").html(data);
 9             }
10         });
11     });

  后端代码:

1     public void ProcessRequest(HttpContext context)
2     {
3         string str = context.Request[\"content\"];
4         string content = HttpUtility.UrlDecode(str);
5         context.Response.ContentType = \"text/plain\";
6         context.Response.Write(content);
7     }

  效果图:

\"从客户端中检测到有潜在危险的 Request.Form 值\"的解决方案汇总

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

  前端代码:

 1     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>\';
 2     var temp = { Title: \'jack\', Content: str };
 3     $.ajax({
 4         type: \"post\",
 5         url: \"TestHandle.ashx\",
 6         contentType:\"application/json;charset=utf-8\",
 7         data: JSON.stringify(temp),
 8         success: function (data) {
 9             $(\"#div\").html(data);
10         }
11     });

  后端代码:

1     string bodyText;
2     using (var bodyReader = new System.IO.StreamReader(context.Request.InputStream))
3     {
4         bodyText = bodyReader.ReadToEnd();
5     }
6     dynamic bodyObj = JsonConvert.DeserializeObject(bodyText);
7 
8     context.Response.ContentType = \"text/plain\";
9     context.Response.Write(bodyObj.Content);

  效果图:

\"从客户端中检测到有潜在危险的 Request.Form 值\"的解决方案汇总

#其他场景的解决方案:

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] ,这样提交的时候,系统就会放过该字段。

  2)、前端代码:

 1     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>\';
 2     $(function () {
 3         $.ajax({
 4             type: \"post\",
 5             url: \"Home/Test\",
 6             data: { Title: \'jack\', Content: str },
 7             success: function (data) {
 8                 $(\"#div\").html(data.ok);
 9             }
10         });
11     });

  3)、后端代码:

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

 #写在最后

 该文只是浅显的总结一下,其中涉及的xss方面,没有详细考虑,欢迎指正!

——————————————————————————————————————————

给TA打赏
共{{data.count}}人
人已打赏
随笔日记

快速上手 Echarts

2020-11-9 5:04:14

随笔日记

数据挖掘之产品预测任务

2020-11-9 5:04:16

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索