【问题标题】:Javascript override Request.Form("foo") for security (XSS)Javascript 覆盖 Request.Form("foo") 以提高安全性 (XSS)
【发布时间】:2012-04-25 19:48:10
【问题描述】:

我有一些源代码,其中包含一些跨站点脚本漏洞。当浏览器将数据发送到正在执行服务器端 Javascript 和经典 ASP (IIS 7.0) 的服务器时,不会发生输入验证。

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

欢迎提出任何建议。

【问题讨论】:

  • 你试过var oldRequestForm = Request.Form; Request.Form = function(param) { return yourSanitization(oldRequestForm(param))}
  • 我刚做了。没用。
  • @JuanMendes 不,不可能。尝试 searchreplace all 而不是 findreplace
  • 全局查找和替换没有什么不优雅的

标签: security asp-classic xss jscript


【解决方案1】:

我认为你不能更改Request.Form 成员。

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

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

【讨论】:

  • OP 不想使用查找/替换,我认为这是一个更好的选择。我喜欢你关于包含在页面顶部的 Request.Form 上循环的建议
【解决方案2】:

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

问题的正确解决方案是执行这样的全局替换。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-12
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 2011-04-01
    • 1970-01-01
    相关资源
    最近更新 更多