最常发生此错误的场景:服务端接收富文本编辑器带格式的内容。
(不推荐)网络上通常对于《.net会报出“检测到有潜在危险的 Request.Form 值。”》异常的解决办法是
“ValidateRequest="false"”
和
web.config中添加“<httpRuntime requestValidationMode=
"2.0"
/>
”
但这种关闭验证机制的办法总感觉心里不踏实,危险重重,下面我说一种我的解决办法,使风险变的可控。
其实也很简单:
ajax我使用的较多,取值都会在js中,那么我决定将值取出后使用js进行加工和判断。
首先,导致报错的一般是<p>这样的格式标记,那么我们对照“Server.HtmlEncode”编码格式进行一下转换。
这里要使用js的replace(a,b)替换方法进行全部替换,而方法默认只会替换第一个,所以我们要使用第一个参数的正则格式来替换全部的:
str.replace(/</g, '<') //将 < 替换为 <
str.replace(/>/g, '>') //将 > 替换为 >
第一个参数正则格式,两个/之间为要替换的内容,最后的g为全文匹配标示符
这样就会吧所有的<>都替换掉,此时将不会报错,同样你可以继续增加一些其它的判断来防止一些攻击。
在数据展示时,将这些内容直接展示在界面上,代码将不会被执行,而是展示出来。
如果需要代码执行,那么在服务端可以使用 Server.HtmlDecode() 方法将数据解码,再将数据输出到界面,代码就会被执行。
虽然不会绝对的安全,但是你已经可以对风险做到心中有数,比起关闭验证机制要好的多,也更灵活。