【问题标题】:Defend against T-SQL injection [duplicate]防御 T-SQL 注入 [重复]
【发布时间】:2013-04-24 22:09:44
【问题描述】:

抱歉,如果这似乎是一个愚蠢的问题,但是使用参数如何防御 SQL 注入以及与 T-SQL 相关的最佳实践是什么:

例如:这是最佳做法吗?

SqlCommand SqlCmd = new SqlCommand("SQL Command @X ....... @Y");
SqlCmd.CommandType = CommandType.Text;
SqlCmd.Parameters.AddWithValue("@X", SqlDbType.VarChar).Value = X;
SqlCmd.Parameters.AddWithValue("@Y", SqlDbType.date).Value = Y;
SqlCmd.Connection = ConnectionString;

【问题讨论】:

  • 谢谢,但我也对一般的最佳实践感兴趣,因为 cmets 提到了溢出。等等?

标签: c# sql sql-server tsql code-injection


【解决方案1】:

是的,这段代码不会受到 SQL 注入的影响。

原因是在使用参数时,您将项目作为值传递给服务器,它们将被解释为这样。

如果你要构造一个字符串,SQL 无法知道值是什么以及查询是什么,并且必须完全依赖语法。

【讨论】:

    【解决方案2】:

    最佳实践是使用 SQL 参数。使用 SqlParameterCollection(如您的示例:SqlCmd.Parameters)会自动为您提供:

    1. 类型检查
    2. 长度验证
    3. 输入被视为文字值而不是可执行代码
    4. 处理通常涉及 SQL 注入攻击的特殊字符

    There are some additional best practices,包括:

    • 约束和清理输入数据
    • 使用在数据库中具有受限权限的帐户
    • 避免泄露数据库错误信息

    您可以在OWASP SQL Injection Prevention Cheat Sheet 中找到这些最佳实践的进一步描述。

    【讨论】:

    • 谢谢最后一个链接特别有用。
    猜你喜欢
    • 1970-01-01
    • 2011-01-02
    • 1970-01-01
    • 1970-01-01
    • 2012-08-04
    • 2022-01-18
    • 2013-04-13
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多