gpt4 book ai didi

.net - Dapper 和 SQL 注入(inject)

转载 作者:行者123 更新时间:2023-12-01 17:59:11 25 4
gpt4 key购买 nike

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

最佳答案

How does Dapper help protect against SQL injections?

它使得完全参数化的数据访问变得非常非常容易,而无需连接输入。特别是,因为您不需要跳过大量“添加参数、设置参数类型、检查 null 因为 ADO.NET 的 null 处理很糟糕、冲洗/重复 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()) {}
}
}

除非我过于简单化了,因为它还处理广泛的问题,例如:

  • 参数的 null 处理
  • 结果列的 null 处理
  • 使用序数列索引
  • 适应底层表和类型的结构变化
  • 结果列的数据转换(各种基元、字符串、枚举等之间)
  • 对非常常见的“在此列表中”场景的特殊处理
  • 对于“执行”,“将其单独应用于输入列表”的特殊处理
  • 避免愚蠢的拼写错误
  • 减少代码维护
  • 处理多个网格
  • 处理单个网格中水平返回的多个对象
  • 与任意 ADO.NET 提供程序一起使用(提示:AddWithValue 很少存在)
    • 包括对 Oracle 等需要额外配置的特定支持
    • 与“迷你分析器”等 ​​ADO.NET 装饰器配合良好
  • 内置支持缓冲(适合中小型数据;最大限度地减少命令持续时间)和非缓冲(适合大数据;最大限度地减少内存使用)访问
  • 由关心性能并且对数据访问和元编程了解“相当多”的人进行优化
  • 允许您使用您选择的 POCO/DTO/匿名类型/任何参数和输出
  • 当输出不能保证生成 POCO/DTO 时,允许使用动态(对于多列)或基元等(对于单列)
  • 避免 EF 等复杂的全类型 ORM 的开销
  • 避免弱类型层(例如 DataTable)的开销
  • 根据需要打开和关闭连接
  • 以及大量其他常见问题

关于.net - Dapper 和 SQL 注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13653461/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com