我正在使用LINQ提供程序,它使用IQ Toolkit將LINQ查詢轉換爲SQL查詢。 IQ Toolkit提供的類是否可以避免SQL注入攻擊?如果沒有,我要做什麼來防範SQL注入攻擊,假設我正在使用IQ工具包並實現我自己的LINQ提供程序。我讀了LINQ to SQL uses SqlParameter, ,但是我仍不清楚SqlParameter需要做什麼以防止SQL注入。IQueryable LINQ提供程序和SQL注入?
2
A
回答
1
如果你想建立你自己的提供者,你必須知道它並不那麼容易。考慮像嵌套選擇,嵌套在哪裏,等等。關於這個話題有很大的blog posts。
但是你有興趣保護你的數據庫免受SQL注入攻擊。所以,如果你看看這個page和VisitConstant
方法的示例代碼,那就是你運行值類型常量(string,int等)或IQueryable的地方。
針對SQL注入的保護並不複雜,您只需創建新的SQLParameter
或者您可以調用方法DbProviderFactory.CreateParameter
來描述here。在遍歷表達式樹時,您將需要一些集合來存儲參數。因此,修改後的代碼如下所示:
protected override Expression VisitConstant(ConstantExpression c) {
IQueryable q = c.Value as IQueryable;
if (q != null) {
// assume constant nodes w/ IQueryables are table references
sb.Append("SELECT * FROM ");
sb.Append(q.ElementType.Name);
}
else if (c.Value == null) {
sb.Append("NULL");
}
else {
switch (Type.GetTypeCode(c.Value.GetType())) {
case TypeCode.Boolean:
param = dbProvider.CreateParameter();
param.Name = "@param" + paramsList.Count;
param.Value = (((bool)c.Value) ? 1 : 0;
paramsList.Add(param);
sb.Append(param.Name);
break;
case TypeCode.String:
param = dbProvider.CreateParameter();
param.Name = "@param" + paramsList.Count;
param.Value = c.Value; // you don't have to care about escaping or formatting
paramsList.Add(param);
sb.Append(param.Name);
break;
...
case TypeCode.Object:
throw new NotSupportedException(string.Format("The constant for '{0}' is not supported", c.Value));
default:
sb.Append(c.Value);
break;
}
}
return c;
}
所以當你travesing表達式樹,你正在構建的SQL字符串和收集的SQL參數。
2
從博客post看起來像IQ工具包(或工具包的初始版本)不適合SQL注入攻擊。但是您可以自己驗證它 - 執行查詢,捕獲生成的SQL並查看是否有使用的參數。
+0
感謝您的迴應,但如果您能夠展示如何使用LINQ提供程序的參數來防止SQL注入,這將有所幫助。 –
相關問題
- 1. LINQ和SQL注入
- 2. Linq到SQL和SQL注入
- 3. LINQ over XAML提供程序
- 4. LINQ to Entities和SQL注入
- 5. angular-chart.js提供程序和注入器無法正常工作
- 6. Linq到sql和sql注入攻擊
- 7. 有IQueryable提供程序來保存順序嗎?
- 8. SQL Server 2008從ADO.NET提供程序導入架構和數據?
- 9. ASP.NET MVC - Linq和SQL程序入門
- 10. LINQ到MySql數據提供程序
- 11. NHibernate的LINQ提供程序問題
- 12. 什麼是LINQ提供程序?
- 13. LINQ - 在運行時改變數據源(和LINQ提供程序)在C#
- 14. 如何使用F#提供的LINQ提供程序?
- 15. linq to sql ExecuteQuery()as IQueryable
- 16. 我在哪裏可以找到SolrNet IQueryable提供程序?
- 17. 定製註釋提供程序
- 18. Microsoft.ACE.OLEDB.12.0提供程序未註冊
- 19. microsoft.jet.oledb.4.0提供程序未註冊
- 20. Microsoft.Jet.OLEDB.4.0提供程序未註冊
- 21. ETW C++提供程序和C#提供程序
- 22. 如果IQueryable的條件LINQ查詢加入(轉換SQL到LINQ)
- 23. 使用IQueryable加入LINQ
- 24. LINQ加入返回的IQueryable
- 25. LINQ(L2E)與存儲過程和IQueryable的
- 26. 注入依賴Linq to Sql
- 27. 排序IQueryable結果Linq
- 28. LINQ和枚舉爲IQueryable的
- 29. 最簡單的Java SQL提供程序?
- 30. sql compact會員提供程序錯誤
謝謝,這是一個相當的代碼片段。我認爲你有這方面的一些經驗。 –
我試圖創建自己的LINQ提供程序,但任務非常困難......並且還有其他項目需要使用;) –