我找到了以下函数来解析和验证旧版ASP中使用的URL参数:
FOR EACH field IN Request.QueryString
var_name = field
var_value = Request.QueryString(field)
var_value = Replace(var_value, "'", "'")
var_value = Replace(var_value,"""",""")
var_value = Replace(var_value, "&", "&")
var_value = Replace(var_value, "%", "%")
str = "Dim " & var_name
EXECUTE(str)
str = var_name & " = var_value"
EXECUTE(str)
NEXT
这对我来说没有意义,而且这两个EXECUTE
语句似乎在乞求注入攻击(尽管我还没有花时间构建一个)。
是否有一种更经典,更安全的方法来解析ASP Classic的查询字符串?
答案 0 :(得分:1)
您可以将值存储在字典中,而不是将值存储在局部变量(即Dim
)中并使自己暴露于execute
的漏洞。您可以在添加时对编码字符串中的值进行编码,但这里是精简版本。
set qs = server.createObject("scripting.dictionary")
for each q in request.querystring
if not qs.exists(q) then qs.add q, request.querystring(q)
next