从客户端中检测到有危险的 Request.QueryString 值 的解决方法

如果在页面中,将文本编辑器内的文本内容直接提交给后台后提示“存在危险的 Request.QueryString 值“,如下图所示
这里写图片描述

错误发生的原因
那是因为文本编辑器自动设置了文本的格式,即添加了各种HTML标签,所以我们在使用里面的内容时,需要在前台用JS方法将HTML标签进行编码,将编码后的文本内容传递给后台,在后台用C#的方法将它解码成HTML标签后存到数据库中。
这里写图片描述
这里写图片描述

编码后的内容
这里写图片描述

通过JS对HTML标签编码和解码

 var HtmlUtil = {
            /*1.用浏览器内部转换器实现html转码*/
            htmlEncode:function (html){
                //1.首先动态创建一个容器标签元素,如DIV
                var temp = document.createElement ("div");
                //2.然后将要转换的字符串设置为这个元素的innerText(ie支持)或者textContent(火狐,google支持)
                (temp.textContent != undefined ) ? (temp.textContent = html) : (temp.innerText = html);
                //3.最后返回这个元素的innerHTML,即得到经过HTML编码转换的字符串了
                var output = temp.innerHTML;
                temp = null;
                return output;
            },
            /*2.用浏览器内部转换器实现html解码*/
            htmlDecode:function (text){
                //1.首先动态创建一个容器标签元素,如DIV
                var temp = document.createElement("div");
                //2.然后将要转换的字符串设置为这个元素的innerHTML(ie,火狐,google都支持)
                temp.innerHTML = text;
                //3.最后返回这个元素的innerText(ie支持)或者textContent(火狐,google支持),即得到经过HTML解码的字符串了。
                var output = temp.innerText || temp.textContent;
                temp = null;
                return output;
            }
        };

首先定义两个方法,然后可通过HtmlUtil.htmlEncode()和HtmlUtil.htmlDecode()`方法对编辑器内的内容进行编码和解码

.NET编码解码

System.Web.HttpUtility.HtmlEncode() //对HTML标签编码
System.Web.HttpUtility.HtmlDecode()   //对HTML标签解码

如果采用.Net MVC,可在相应的Action上添加[ValidateInput(false)]特性
但是如果你使用的是MVC 3.0甚至更低版本,那么你会发现做了以上的设置后还是无效。这是因为你还需要在web.config中做以下设置:

<system.web > 
<httpRuntime requestValidationMode="2.0" / > 
</system.web >
发布了19 篇原创文章 · 获赞 6 · 访问量 9430

猜你喜欢

转载自blog.csdn.net/u012712556/article/details/80266273