如果我使用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注入和XSS攻击
- 7. 本机SQL查询 - SQL注入攻击
- 8. 亚音速SimpleRepository类注入控制器
- 9. Nhibernate易受SQL注入攻击吗?
- 10. 用OpenCart保护SQL注入攻击2.3.0.2
- 11. SQL注入攻击 - 使用mysqli_multi_query()
- 12. 法律网站SQL注入攻击
- 13. 最常用的SQL注入攻击
- 14. SQLite和亚音速
- 15. 亚音速和SQL Azure可能吗?
- 16. PHP和PostgreSQL:避免跨站脚本和SQL注入攻击
- 17. MySQL中的Python,MATCH和注入攻击
- 18. 防止MDX注入攻击
- 19. 网络注入攻击
- 20. 的iframe注入攻击
- 21. Opencart的注入攻击
- 22. 左亚音速加入3
- 23. 亚音速加入问题
- 24. 外加入亚音速3.0
- 25. 加入亚音速查询
- 26. 分号在sql注入和xss攻击中的作用
- 27. 这是SQL注入攻击+和+(5 = 5 + xor + 2 = 9) - + a
- 28. FILTER_SANITIZE_STRING是否足以避免SQL注入和XSS攻击?
- 29. 如何在PHP中避免SQL注入和XSS攻击?
- 30. 如何使用Shift-JIS和CP932创建SQL注入攻击?
不,我们不会使用被直接使用SQL,因此我可以假设,我们将亚音速安全! – TheVillageIdiot 2009-05-06 09:05:03