如果我使用SubSonic爲我的Web項目創建DAL,是否需要擔心防止SQL注入攻擊?Sql注入攻擊和亞音速
2
A
回答
6
這取決於你如何構建你的查詢。如果不使用參數,使用亞音速編寫不安全的查詢是完全可能的。
// Bad example:
string sql = "delete from Products where ProductName = " + rawUserInput;
QueryCommand qry = new QueryCommand(sql, Product.Schema.Provider.Name);
DataService.ExecuteQuery(qry);
// Should be:
string sql = "delete from Products where ProductName = @TargetName";
QueryCommand qry = new QueryCommand(sql, Product.Schema.Provider.Name);
qry.AddParamter("@TargetName", rawUserInput, DbType.String);
DataService.ExecuteQuery(qry);
6
不,SubSonic使用參數將數據傳遞到數據庫,它負責處理這個問題。
4
簡短的回答是否定的。如果您使用Subsonic Generated類或Subsonic.Select類來生成查詢/更新/插入語句,那麼您不必擔心SubSonic會正確使用參數。
但是,Paul指出,如果你不想寫出SubSonic允許的不安全SQL。 SubSonic不是你的母親,它不會阻止你,它更像你最好的朋友,它會告訴你不要,但如果你決定這樣做,那是你的決定。
1
只是爲了重新目前保羅的例子(如果你FK約束)
string rawUserInput = "Queso Cabrales1";
#region BadExample
//string sql = "delete from Products where ProductName = " + rawUserInput;
////QueryCommand objQueryCommand = new QueryCommand(sql, Product.Schema.Provider.Name);
////DataService.ExecuteQuery(objQueryCommand);
#endregion BadExample
#region BetterExample
// Should be:
string sql = "update Products set ProductName = @ProductName where ProductName='Queso Cabrales'";
QueryCommand objQueryCommand = new QueryCommand(sql, Northwind.Product.Schema.Provider.Name);
objQueryCommand.AddParameter("@ProductName" , rawUserInput, DbType.String);
DataService.ExecuteQuery(objQueryCommand);
panGvHolder.Controls.Clear();
Query qry = Northwind.Product.CreateQuery();
qry.Columns.AddRange(Northwind.Product.Schema.Columns);
qry.WHERE("UnitPrice > 15").AND("UnitsInStock < 20 ");
//WHERE("UnitPrice > 15").AND("UnitsInStock < 30 ");
#endregion BetterExample
#region PresentResultsReplaceResponseWriteWithConsole.WriteLineForConsoleApp
using (IDataReader rdr = qry.ExecuteReader())
{
Response.Write("<table>");
while (rdr.Read())
{
Response.Write("<tr>");
for (int i = 0; i < rdr.FieldCount; i++)
{
Response.Write("<td>");
Response.Write(rdr[i].ToString() + " ");
Response.Write("<td>");
} //eof for
Response.Write("</br>");
Response.Write("</tr>");
}
Response.Write("<table>");
}
#endregion PresentResultsReplaceResponseWriteWithConsole.WriteLineForConsoleApp
} //eof method
相關問題
- 1. SQL注入攻擊和django
- 2. Erlang和SQL注入攻擊
- 3. SQL注入攻擊
- 4. SQL注入攻擊
- 5. Linq到sql和sql注入攻擊
- 6. SQL注入攻擊asp.net
- 7. 防止SQL注入和XSS攻擊
- 8. 本機SQL查詢 - SQL注入攻擊
- 9. 亞音速SimpleRepository類注入控制器
- 10. JavaScript注入攻擊
- 11. Sql注入 - 下面是否有攻擊?
- 12. 測試一個SQL注入攻擊
- 13. SQL注入攻擊 - 使用mysqli_multi_query()
- 14. SQL注入/ XSS攻擊可能與preg_replace?
- 15. 用OpenCart保護SQL注入攻擊2.3.0.2
- 16. 這是一個SQL注入攻擊
- 17. 法律網站SQL注入攻擊
- 18. Nhibernate易受SQL注入攻擊嗎?
- 19. 最常用的SQL注入攻擊
- 20. SQLite和亞音速
- 21. 亞音速和SQL Azure可能嗎?
- 22. PHP和PostgreSQL:避免跨站腳本和SQL注入攻擊
- 23. MySQL中的Python,MATCH和注入攻擊
- 24. 口譯在注入攻擊
- 25. 防止xss攻擊/注入
- 26. Opencart的注入攻擊
- 27. 防止MDX注入攻擊
- 28. 網絡注入攻擊
- 29. 的iframe注入攻擊
- 30. 左亞音速加入3
不,我們不會使用被直接使用SQL,因此我可以假設,我們將亞音速安全! – TheVillageIdiot 2009-05-06 09:05:03