Mar*_*ell 50
Dapper如何帮助防止SQL注入?
这使得完全参数化数据访问变得非常非常容易,无需连接输入.特别是,因为你并不需要通过大量的"添加参数,设置参数类型,检查空跳,因为ADO.NET有苏茨基空处理的20个参数,冲洗/重复",通过使参数处理愣神方便.它还可以很容易地将行转换为对象,避免使用诱惑DataTable...每个人都获胜.
来自评论:
还有一个......小巧玲珑实际上有什么帮助呢?
回答一下,让我们以marc_s的回复为例,并以旧的方式写出来,假设我们必须从头开始connection.这是:
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()) {}
}
}
Run Code Online (Sandbox Code Playgroud)
除了我过分夸大,因为它还涉及广泛的问题,如:
AddWithValue很少存在)
dynamic当输出不保证生成POCO/DTO时允许使用(对于多列)或基元等(对于单列)DataTablemar*_*c_s 36
您只需要像往常一样使用参数化查询.由于Dapper只是"原始"SQL和ADO.NET的"微小"(并且相当薄)扩展 - 只需使用参数化的ADO.NET查询和提供参数.
请参阅Dapper-Dot-Net网站上的此示例:
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id",
new { Age = (int?)null, Id = guid });
Run Code Online (Sandbox Code Playgroud)
SQL查询使用参数 - 您将这些参数提供给"Dapper"查询.
总结一下:使用Dapper本身并没有帮助防止SQL注入本身 - 但是使用参数化的 ADO.NET/SQL 查询(并且这些查询完全由Dapper支持,完全没有问题)
| 归档时间: |
|
| 查看次数: |
22560 次 |
| 最近记录: |