我有一些源代码,其中包含一些跨站点脚本漏洞。当浏览器将数据发送到正在执行服务器端 Javascript 和经典 ASP (IIS 7.0) 的服务器时,不会发生输入验证。
我的问题是,有没有办法覆盖Request.Form("foo")
对象/方法,以便我也可以调用清理函数并摆脱禁止的 JS/HTML?我不想对每个Request.Form
被调用的文件进行查找和替换。我希望有更优雅的东西。
任何建议表示赞赏。
我有一些源代码,其中包含一些跨站点脚本漏洞。当浏览器将数据发送到正在执行服务器端 Javascript 和经典 ASP (IIS 7.0) 的服务器时,不会发生输入验证。
我的问题是,有没有办法覆盖Request.Form("foo")
对象/方法,以便我也可以调用清理函数并摆脱禁止的 JS/HTML?我不想对每个Request.Form
被调用的文件进行查找和替换。我希望有更优雅的东西。
任何建议表示赞赏。
我不认为你可以改变Request.Form
成员。
作为部分解决方案,您可以做的是创建一个代码,该代码将首先在每个页面上运行(例如,使用include
指令),循环Request.Form
等等Request.QueryString
,如果它发现可疑代码,它会终止代码执行(Response.End
)。这个解决方案是部分的,因为它并没有真正清理输入,它只是在发现可疑文本时放弃执行。
另一种选择:创建一个数组,平行于Request.Form
. 使用与 Request.Form 中相同的成员填充此数组,但这次已清理。然后,快速对整个代码库进行查找和替换,并更改Request.Form
为您的自定义数组变量。
有一种方法可以Request
用另一个 COM 对象替换整个对象,但它是一个疯狂的解决方案,它仍然需要所有使用的 ASP 文件都Form
包含一个通用的顶级包含文件。不可能Request
在应用程序级别全局替换对象或其成员之一。
该问题的正确解决方案,尽管您的声明“不想在任何地方对每个文件进行查找和替换”,但执行这样的全局替换。
尽管存在 .asp 文件的数量,但成本不过是敲出一个简单的程序来打开文件夹树中的每个 ASP 文件,添加一个包含行并替换Request.Form
.