ASP

时间:2017-03-23 17:05:52

标签: security asp-classic query-string

我找到了以下函数来解析和验证旧版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的查询字符串?

1 个答案:

答案 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