代码之家  ›  专栏  ›  技术社区  ›  crackedcornjimmy

当用户输入带有特殊字符的密码时,如何防止“删除BOBBY表”?

  •  3
  • crackedcornjimmy  · 技术社区  · 15 年前

    在我们古老的经典ASP环境中,我们使用OWASP从请求对象获取密码并加密非字母数字字符。这是防止sql注入的第一道防线。我们使用其他方法来防止sql注入。

    问题是,当我们收集数据来组合一个httppost消息时,只需从用户输入中获取密码,就可以将其OWASP并发送出去。因此密码不正确。

    我们最后做的是假设一个50个字符的文本字段没有足够的空间来进行大量的sql注入,并更改了代码,因此我们没有输入密码。这感觉有点可怕。

    他们的方法更好吗?

    代码是用vbScript编写的。

    4 回复  |  直到 15 年前
        1
  •  2
  •   p.campbell    15 年前

    考虑将SQL语句移动到存储过程中,并确保在这些存储过程中不使用动态SQL。

    Dim userPwd = Trim(Request.QueryString("userPwd"))
    '--- Create and append parameter for Password
    Set pwdParameter = cmd.CreateParameter("@UserPassword", ad_nVarChar, adParamInput, 50, userPwd)
    cmd.Parameters.Append pwdParameter
    

    当然最好不要存放pwd 在你的数据库里,而是一个咸杂烩。

    无论向数据库发送什么字符串,都首选上面的方法,因为只要在存储过程中不将参数与动态SQL一起使用,它将避免直接作为临时语句执行,并将避免SQL注入。

        2
  •  4
  •   D'Arcy Rittich    15 年前

    更好的解决方案是将所有查询转换为参数化查询。

    这是一个 12 year old article explaining how :)

        3
  •  3
  •   Franci Penov    15 年前

    为什么用明文发送密码?计算密码的哈希值并发送该值。这将允许您防止SQL注入和避免中间人类型的攻击。

        4
  •  1
  •   Jonathan Leffler    15 年前

    很多网站限制了密码中可以使用的字符集-选择一个不会给你带来悲伤的字符集。这可能意味着字母数字和一些标点符号(逗号、句号、破折号)。有人说,这些网站让我很恼火——如果有机会,我会在密码中使用一组丰富的字符,而在只使用字母数字的网站上,我通常会使用类似“IHateNoPunctSites”之类的废话作为密码。