<div id="search"><input id="txtIP" type="text" /> <input id="btnSubmit" type="button" value="查询" /></div> <script type="text/javascript">// <![CDATA[ $(function () { $("#btnSubmit").click(function () { var pattern = new RegExp("[`~!@#$^&*()=|{}':;',\\[\\]<>/?~!@#¥……&*()——|{}【】‘;:”“'。,、?]") var key = $.trim($("#txtIP").val()).replace("http://","").replace("https://"); var rs = ""; for (var i = 0; i < key.length; i++) { rs = rs + key.substr(i, 1).replace(pattern, ''); } window.location.href = "/" + rs + "/"; }) }) // ]]></script>
我是上面这样的功能代码,如果用户是老老实实从搜索框输入的话,jS会过滤特殊字符,功能没有问题。
但是如果用户不从搜索框搜索,直接这样访问http://localhost/<script>alert('haha')</script>/ ,后台就会报错“从客户端(<)中检测到有潜在危险的 Request.Path 值。”黄屏。
除了加 validateRequest="false"和修改web.config外,还有其它方法来预防吗?
我在Page_Load里都没法过滤啊
或者从哪里入手可以让它不报黄屏,而出现一个提示页面。
两种方式:1、如上楼,修改web.config和页面的ValidateRequest
2、在提交后台的时候,对提交的数据进行编码处理;
输入框提交的可以处理。我现在的问题是用户直接在浏览器地址栏中输入非法参数,这个不走page_load,直接就报黄页了。
或者应该在哪个管道中去处理?
@abc54288: Global中有个Application_Error,这里面去抓。
我也遇到过 不过就是 加了validateRequest="false"和修改web.config就好了