2012-04-24 72 views
1

我有一些源代码中存在一些跨站点脚本漏洞。当浏览器将数据发送到执行服务器端JavaScript和传统ASP(IIS 7.0)的服务器时,不会发生输入验证。Javascript覆盖安全性(XSS)的Request.Form(“foo”)

我的问题是,有没有办法覆盖Request.Form("foo")对象/方法,以便我也可以调用一个清理功能,并摆脱禁止的JS/HTML?我不想在每个文件的每个文件上找到并替换Request.Form被调用。我希望有更优雅的东西。

任何建议表示赞赏。

+0

你尝试过'var oldRequestForm = Request.Form; Request.Form = function(param){return yourSanitization(oldRequestForm(param))}' – 2012-04-24 16:48:34

+0

我刚刚做到了。没有工作。 – 2012-04-24 17:01:09

+0

@JuanMendes不,不可能。尝试_search_和_replace all_而不是_find_和_replace_。 – 2012-04-24 20:24:39

回答

2

我不认为你可以改变Request.Form成员。

你可以做什么,作为一个部分解决方案,是创建将每个页面上首次运行(例如,使用include指令),它会遍历Request.FormRequest.QueryString等代码,如果发现可疑代码它终止代码执行(Response.End)。这个解决方案是部分的,因为它没有真正处理输入,它只是在发现可疑文本时放弃执行。

另一种选择:创建一个数组,平行于Request.Form。使用与Request.Form中相同的成员填充此数组,但这次已过滤。然后,快速在您的整个代码库中查找并替换,并将Request.Form更改为您的自定义数组变量。

+0

OP不想使用查找/替换,我认为这是一个更好的选择。我喜欢你对包含在页面顶部的'Request.Form'循环的建议 – 2012-04-24 20:48:59

1

有一种方法可以用另一个COM对象代替整个Request对象,但它是一个疯狂的解决方案,它仍然要求所有使用Form的ASP文件都包含一个公共顶部包含文件。无法在应用程序级别全局替换Request对象或其成员之一。

对于这个问题的正确解决方案,您的声明“不想在每个单独的文件上查找并替换每个文件”,尽管这样做是执行这样的全局替换。

尽管存在多少.asp文件,但成本只是敲一个简单的程序来打开文件夹树中的每个ASP文件,添加一个包含行并替换Request.Form