【问题标题】:SqlCommand Parameters ClarificationSqlCommand 参数说明
【发布时间】:2011-10-29 21:44:34
【问题描述】:

有人告诉我,如果在 C# 中使用 SqlCommand 并且要向该命令添加参数,它将增加安全性,因为它可以防止 Sql Injection。我想知道这是不是真的。如果是这样,它如何停止Sql Injection,因为我的理解是在使用参数时,它只是在Sql命令中的某个点插入一个字符串。所以那个字符串可以是任何东西,使 Sql Injection 成为可能,对吗?

【问题讨论】:

    标签: c# sql sql-injection sqlcommand sqlparameter


    【解决方案1】:

    这不是一个简单的替换。框架将 escape 发送值,(尤其是字符串),[作为 RPC 调用的单独部分],因此不可能将值作为代码执行.

    感谢@PanagiotisKanavos 提供correction(6 年后)。

    【讨论】:

    • 好的,所以框架将删除数字或刻度线''内的任何东西?
    • 不,它将包括刻度线作为查询的一部分。所以如果你的字段是一个数字并且有这样的东西。 ' + 0 = 0',整个事情将是参数,查询将出错,而不是修改查询的注入意图。错误是您想要的。
    • 不,它不会删除任何东西,它只会对其进行编码,以便可以在写入时将其存储在数据库中。 SqlParameter 还关注匹配列存储和适当编码的数据类型,以及检查绑定条件,如字符串是否适合包含 VARCHAR(n) 的列。
    • 框架不会转义、转换或编码任何东西。参数值在 RPC 调用中作为单独的字段发送。它们从不是查询字符串的一部分,甚至从不转换为字符串,这就是它们无法执行的原因
    • 谢谢@PanagiotisKanavos,答案已更新。我当时不知道。
    猜你喜欢
    • 2021-12-31
    • 1970-01-01
    • 2016-11-25
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    相关资源
    最近更新 更多