Javascript覆盖安全性(XSS)的Request.Form(“foo”)
我有一些源代码中存在一些跨站点脚本漏洞。当浏览器将数据发送到执行服务器端JavaScript和传统ASP(IIS 7.0)的服务器时,不会发生输入验证。Javascript覆盖安全性(XSS)的Request.Form(“foo”)
我的问题是,有没有办法覆盖Request.Form("foo")
对象/方法,以便我也可以调用一个清理功能,并摆脱禁止的JS/HTML?我不想在每个文件的每个文件上找到并替换Request.Form
被调用。我希望有更优雅的东西。
任何建议表示赞赏。
我不认为你可以改变Request.Form
成员。
你可以做什么,作为一个部分解决方案,是创建将每个页面上首次运行(例如,使用include
指令),它会遍历Request.Form
,Request.QueryString
等代码,如果发现可疑代码它终止代码执行(Response.End
)。这个解决方案是部分的,因为它没有真正处理输入,它只是在发现可疑文本时放弃执行。
另一种选择:创建一个数组,平行于Request.Form
。使用与Request.Form中相同的成员填充此数组,但这次已过滤。然后,快速在您的整个代码库中查找并替换,并将Request.Form
更改为您的自定义数组变量。
OP不想使用查找/替换,我认为这是一个更好的选择。我喜欢你对包含在页面顶部的'Request.Form'循环的建议 – 2012-04-24 20:48:59
有一种方法可以用另一个COM对象代替整个Request
对象,但它是一个疯狂的解决方案,它仍然要求所有使用Form
的ASP文件都包含一个公共顶部包含文件。无法在应用程序级别全局替换Request
对象或其成员之一。
对于这个问题的正确解决方案,您的声明“不想在每个单独的文件上查找并替换每个文件”,尽管这样做是执行这样的全局替换。
尽管存在多少.asp文件,但成本只是敲一个简单的程序来打开文件夹树中的每个ASP文件,添加一个包含行并替换Request.Form
。
你尝试过'var oldRequestForm = Request.Form; Request.Form = function(param){return yourSanitization(oldRequestForm(param))}' – 2012-04-24 16:48:34
我刚刚做到了。没有工作。 – 2012-04-24 17:01:09
@JuanMendes不,不可能。尝试_search_和_replace all_而不是_find_和_replace_。 – 2012-04-24 20:24:39