由Content Provider使用CursorLoaders管理的我的應用程序數據位於SQLite數據庫中。 根據Veracode靜態掃描報告,它傾向於SQL注入。在SQL命令中使用特殊元素的不當中和
但根據docs,
要避免此問題,使用使用選擇條款?作爲可替換參數和單獨的選擇參數數組。當你這樣做時,用戶輸入直接綁定到查詢上,而不是被解釋爲SQL語句的一部分。由於它不被視爲SQL,因此用戶輸入無法注入惡意SQL。
public Loader<Cursor> onCreateLoader(int id, Bundle b) {
return new CursorLoader(getActivity(),
NewsFeedTable.CONTENT_URI,
NewsFeedTable.PROJECTION,
"_id = ?",
new String[]{tid},
null);
}
,如上面的代碼,我在做類似的方式。 此外,我在The Mobile Application Hacker's Book
如果這是不夠的措施來防止SQL注入讀一樣的,我怎麼消毒從特殊字符的SQL查詢? 每個閱讀建議使用參數化的PreparedStatements。 內容提供商是否不默認?
到SQLiteStatement另一種方法是,爲他們提供通過其使用字符串數組的參數化的語句使用查詢,插入,更新和刪除SQLiteDatabase方法。
但後來我從here閱讀文檔是
StringEscapeUtils.escapeSql 這是一個誤導性的方法,只處理最簡單的可能SQL的案例。由於SQL不是Lang的重點,所以維護這種方法沒有意義。
我應該如何對特殊字符進行輸入驗證? 請幫助,讓我更好地理解它。
這是一個非常需要的解釋。謝謝:) @ CL,但是我不清楚_sanitizing data_實際上意味着什麼,或者當函數(DatabaseUtils.sqlEscapeString())說_SQL轉義string_時它做了什麼。 我試過搜索它,但無法得到一些真實的例子或者某種程度上沒有得到它。 你能解釋給我嗎? – Priya