[英]Entity Framework + sql injection
我正在構建一個IQueryable
,我正在應用相關的過濾器,我在這里遇到了這行代碼。
items = items.OrderBy(string.Format("{0} {1}", sortBy, sortDirection));
這段代碼容易受到SQL注入嗎? 或者在幕后參數化這些(字符串)參數? 我假設所有Linq查詢都為我進行了轉義和參數化,但事實上我能夠像這樣直接傳入一個字符串,這讓我失望了。
您必須避免從暴露給可能不受信任的調用方的方法返回IQueryable<T>
類型, 原因如下:
公開IQueryable<T>
類型的查詢的使用者可以在結果上調用公開安全數據或增加結果集大小的方法。 例如,請考慮以下方法簽名:
public IQueryable<Customer> GetCustomer(int customerId)
此查詢的使用者可以在返回的IQueryable<Customer>
上調用.Include("Orders")
以檢索查詢不打算公開的數據。 通過將方法的返回類型更改為IEnumerable<T>
並調用實現結果的方法(如.ToList()
), .ToList()
這種情況。
IQueryable<T>
查詢,所以公開IQueryable<T>
類型的查詢的使用者可以捕獲拋出的異常。 Exceptions
可能包含不適合消費者的信息。
如何防止SQL注入攻擊?
通過向query predicate
和parameter names
中使用的值提供malicious input
,可以在Entity SQL中執行SQL注入攻擊。
避免 SQL注入的風險
您永遠不應將用戶輸入與Entity SQL命令文本相結合
實體SQL查詢accept parameters
任何accept parameters
文字的accept parameters
。 您應該使用參數化查詢,而不是將外部代理中的文字直接注入查詢。 您還應該考慮使用查詢構建器方法來安全地構造實體SQL。
盡管在LINQ to Entities中可以進行查詢組合,但它是通過對象模型API執行的。 與實體SQL查詢不同,LINQ to Entities查詢不是使用字符串操作或連接組成的,並且它們不易受傳統SQL注入攻擊的影響。
參考: 安全考慮因素(實體框架)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.