.net – Dapper和SQL注入

Dapper如何帮助防止SQL注入?我正在测试不同的DAL技术,必须选择一个来保护我们的网站。我倾向于Dapper(http://code.google.com/p/dapper-dot-net/),但需要一些帮助才能了解安全性。

How does Dapper help protect against SQL injections?

它使得它真的很容易做完全参数化的数据访问,而不需要连接输入。特别是因为不需要跳过很多“add参数,设置参数类型,检查null,因为ADO.NET具有吸取空处理,20个参数的冲洗/重复”,通过使参数处理愚蠢的方便。它也使得将行转换成对象真的很容易,避免了使用DataTable的诱惑…每个人都赢了。

从评论:

One more…what does dapper actually help do then?

要回答,我们来看看marc_s的回复,并以旧的方式写下这个例子,假设我们必须从连接开始。那就是:

List<Dog> dogs = new List<Dog>();
using(var cmd = connection.CreateCommand()) {
    cmd.CommandText = "select Age = @Age, Id = @Id";
    cmd.Parameters.AddWithValue("Age", DBNull.Value);
    cmd.Parameters.AddWithValue("Id", guid);
    using(var reader = cmd.ExecuteReader()) {
        while(reader.Read()) {
            int age = reader.ReadInt32("Age");
            int id = reader.ReadInt32("Id");
            dogs.Add(new Dog { Age = age, Id = id });
        }
        while(reader.NextResult()) {}
    }
}

除了我过度简单化,因为它也涉及广泛的问题,如:

>空处理参数
>结果列的空处理
>使用序数列索引
>适应基础表和类型的结构变化
>结果列的数据转换(各种基元,字符串,枚举等)
>特别处理这个“常见的”在这个列表“的情况
>为“执行”,特殊处理“单独应用于输入列表”
>避免愚蠢的打字错误
>减少代码维护
>处理多个网格
>处理在单个网格中水平返回的多个对象
>使用任意ADO.NET提供程序(提示:AddWithValue很少存在)

>包括对Oracle等需要额外配置的特定支持
>使用ADO.NET decoratos,如“mini-profiler”

>内置支持两种缓冲(适用于小到中等数据;最小化命令持续时间)和非bufferesd(适用于大数据;最小化内存使用)访问
>由关心性能的人员进行优化,并了解数据访问和元编程的“相当多”
>允许您使用您选择的POCO / DTO / anon-type /无论参数和输出
>允许在输出不保证生成POCO / DTO时使用动态(对于多列)或原语等(对于单列)
>避免像EF这样复杂的全类型ORM的开销
>避免像DataTable这样的弱类层次的开销
>必要时打开和关闭连接
>和广泛的其他常见的陷阱

翻译自:https://stackoverflow.com/questions/13653461/dapper-and-sql-injections

转载注明原文:.net – Dapper和SQL注入