Dapper如何幫助防止SQL注入?我正在測試不同的DAL技術,並且必須選擇一個才能確保我們的網站安全。我傾向於Dapper(http://code.google.com/p/dapper-dot-net/),但需要一些幫助來了解安全性。Dapper和SQL注入
27
A
回答
40
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()) {}
}
}
除了我已經嚴重超simplfied,因爲它也具有廣泛的問題如涉及:
- 的參數
- 結果的空處理空值處理使用有序列索引
- 適應和基礎表的結構變化列
- 鍵入
- 數據c結果列的反轉(在各種基元,字符串,枚舉等之間)
- 特殊處理oh-so-common「在此列表中」場景
- 對於「執行」,「特殊處理」輸入」
- 避免傻錯別字
- 減少代碼維護
- 處理多個網格
- 處理多個對象的列表中單個網格
- 水平返回任意ADO.NET提供者合作(提示:
AddWithValue
很少存在)- 包括像Oracle,其與ADO.NET decoratos需要額外的配置
- 戲劇很好,例如「微型分析器」兩個緩衝
- 內置支持的東西(具體支持適用於小到中等數據;最大限度地減少命令持續時間)和非緩衝(適用於大數據;最小化內存使用)訪問
- 優化的人關心性能和知道「相當多」的數據訪問和元編程
- 允許你使用您選擇的POCO/DTO/anon-type /任何參數和輸出
- 允許在輸出不保證生成時使用
dynamic
(對於多列)或基元等(對於單列) POCO/DTO - 避免像EF
- 這樣的複雜完全類型ORM的開銷,避免了類型爲0的弱類型層的開銷
- 打開和關閉連接作爲-必要
- 和廣闊範圍內的其他常見的問題
22
你只需要使用參數化查詢像你一直應該。由於Dapper只是對「原始」SQL和ADO.NET的「微小」(非常薄)的擴展 - 只需使用參數化的ADO.NET查詢和提供參數即可。
從小巧玲瓏的 - 點 - 網網站查看此示例:
var dog = connection.Query<Dog>("select Age = @Age, Id = @Id",
new { Age = (int?)null, Id = guid });
的SQL查詢使用參數 - 你提供這些以「小巧玲瓏」的查詢。
總結:本身使用小巧玲瓏不幫助抵禦SQL注入本身 - 使用參數 ADO.NET/SQL查詢但是做(和這些查詢都是絕對的小巧精緻,在所有支持的,沒有任何問題)
相關問題
- 1. Dapper LIKE查詢MySql安全的Sql注入?
- 2. Parameters.Add和Sql注入
- 3. Doctrine和SQL注入
- 4. SQL注入和Codeigniter
- 5. LINQ和SQL注入
- 6. PHP和SQL注入
- 7. Hibernate和SQL注入
- 8. mysql_num_rows和SQL注入
- 9. EntitySQL和SQL注入
- 10. SqlCeResultSet和SQL注入
- 11. ORM和SQL注入
- 12. Linq到SQL和SQL注入
- 13. parse_str和ajax和sql注入
- 14. SQL注入和Postgres「CREATE SCHEMA」
- 15. SQL注入和.NET 4
- 16. Doctrine2 FindOneBy和SQL注入
- 17. LINQ to Entities和SQL注入
- 18. Like子句和sql注入
- 19. doctrine 2 orm和sql注入
- 20. Gnome的libgda和SQL注入
- 21. SQL注入和LIKE語句
- 22. SqlDataSource控件和SQL注入
- 23. SQL注入,行情和PHP
- 24. SQL注入攻擊和django
- 25. Erlang和SQL注入攻擊
- 26. Django和SQL注入示例
- 27. PHP SQL注入和保護?
- 28. CFWheels ORM和SQL注入
- 29. 內容值和SQL注入
- 30. 參數和SQL注入asp.net
@niico它在哪裏做的東西是不是'Dog'? –
@niico啊,對,現在和你在一起。當我讀它時,我認爲我的眼睛自動糾正了!是的,這會更清楚。請注意,雖然(如上所述)我正在從另一個使用'dog'作爲變量名稱的答案中拿出例子。 –
現在,您是否使用*** Dapper ***進行參數化查詢? – Kiquenet