SQL注入的其他可能方式?

时间:2011-12-07 08:59:50

标签: asp.net sql-server-2008 sql-injection

我有一个在SSL中运行的ASP.NET页面,检查发生在代码隐藏中。

我已完成以下操作以阻止sql注入:

  1. 包含RegEx以过滤掉不必要/危险的字符(基本上,它现在只允许0-9,a-z和A-Z)。

  2. 使用看起来像“SELECT * FROM table WHERE username = @Username ...”的查询。

  3. 我还添加了帐户锁定功能,因此您只能进行有限的尝试。

  4. 在IBM AppScan测试漏洞之后,似乎我只修复了盲SQL注入而不是Authenticated Bypass。

    是否有任何我错过的导致我未通过漏洞测试的内容?

    更新:

    ...
    
    bool bUser = FilterInput(txtUsername.Text);
    bool bPass = FilterInput(txtPassword.Text);
    
    // check for restricted characters
    if (bUser && bPass)
       Response.Redirect("Login.aspx");
    ...
    
    public static bool FilterInput(string text)
    {
        // check if string contains only letters and numbers
        return (Regex.IsMatch(text, @"^[a-zA-Z0-9]+$"));
    }  
    

    任何不在a-zA-Z0-9字符内的内容都应该抛出'false'并导致页面重定向/刷新登录页面。

    数据库查询都使用参数化查询,登录正常。这个部分没问题。

2 个答案:

答案 0 :(得分:1)

删除你做的第一件事,然后使用SqlCommand.Parameters,如下所述:

SQL Injection vs. Lethal Injection / Protection Against SQL Injection

我总是使用多个连接字符串来访问数据库,每个人都有不同的角色:阅读撰写执行即可。当你这样做时,你确保如果在读取操作上成功进行攻击,攻击者除了阅读之外不能做其他事情(这仍然不好但比修改更好)

答案 1 :(得分:0)

显然,代码上有2个数据库查询未更新为参数化查询。

参数化查询足以阻止SQL注入,因此其他步骤/功能有点过分。