You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复经典ASP代码中存在的XSS跨站脚本攻击漏洞?

漏洞原理

你提供的经典ASP代码直接将未做任何校验、转义的URL参数go直接拼接进JavaScript代码输出到前端,攻击者可构造携带恶意脚本的go参数值注入页面执行,属于典型的反射型XSS漏洞。

修复方案

  • 优先做输入白名单校验:根据业务逻辑限制go参数的合法取值范围,比如仅允许为数字、指定字符串列表等,不符合规则的直接替换为默认值,从根源阻断恶意内容传入。
  • 输出时做对应上下文转义:由于strGo最终会作为URL查询参数嵌入到JS字符串中,需要做双层转义:
    1. 先对strGo做URL编码,避免破坏URL结构
    2. 对要输出到JS字符串的内容做特殊字符转义,避免破坏JS语法结构

修复后代码示例

Dim strGo : strGo = Request.QueryString.Item("go")

' 白名单校验示例,可根据实际业务规则调整
' 示例规则:仅允许go参数为纯数字,不符合则赋值默认值
If Not IsNumeric(strGo) Then
    strGo = "default"
End If

' JS特殊字符转义函数
Function JSEncode(str)
    str = Replace(str, "\", "\\")
    str = Replace(str, "'", "\'")
    str = Replace(str, """", "\""")
    str = Replace(str, vbCrLf, "\n")
    str = Replace(str, vbCr, "\r")
    str = Replace(str, vbLf, "\n")
    JSEncode = str
End Function

' 先URL编码参数,再做JS转义后输出
Dim encodedGo : encodedGo = JSEncode(Server.URLEncode(strGo))
Response.Write "document.location.href = 'browserCompatibilities.asp?go=" & encodedGo & "';"

补充说明

如果业务场景中go参数取值范围灵活无法做严格白名单,严格执行上述双层转义逻辑也可有效防范该XSS漏洞。

内容的提问来源于stack exchange,提问作者Srinivas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 16:39:00