如何修复经典ASP代码中存在的XSS跨站脚本攻击漏洞?
漏洞原理
你提供的经典ASP代码直接将未做任何校验、转义的URL参数go直接拼接进JavaScript代码输出到前端,攻击者可构造携带恶意脚本的go参数值注入页面执行,属于典型的反射型XSS漏洞。
修复方案
- 优先做输入白名单校验:根据业务逻辑限制
go参数的合法取值范围,比如仅允许为数字、指定字符串列表等,不符合规则的直接替换为默认值,从根源阻断恶意内容传入。 - 输出时做对应上下文转义:由于
strGo最终会作为URL查询参数嵌入到JS字符串中,需要做双层转义:- 先对
strGo做URL编码,避免破坏URL结构 - 对要输出到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
相关产品推荐
相关产品推荐

