2012-02-28 83 views
1

當使用php和mysql在網上編寫數據庫時,您必須在將數據插入數據庫之前對數據進行清理,以確保有人不會引用引號等。這在Android和MySQLite中是必需的嗎?它會自動消毒嗎?還是僅僅是沒有必要?消毒數據庫

+2

僅供參考,單詞是sanitize – xbonez 2012-02-28 04:11:08

+1

哈哈是的,對不起。單詞爭奪上樓:) – bwoogie 2012-02-28 04:18:50

+0

嘿,我要回答「DROP DATABASE ;」 :D – 2012-02-28 04:22:40

回答

5

1)是的,不需要平臺,您需要清理來自不受信任來源(來自用戶,另一個系統,另一個應用程序等的任何輸入 - 任何未硬編碼到您的應用程序中的輸入)。

2)是的,您需要在Android中訪問SQLite數據庫(直接或通過Content Provider)執行此操作。

3)在使用SQL命令到數據庫之前對輸入進行消毒是必要的,但它不能阻止所有形式的SQL注入。防止這種情況的最佳策略是利用參數化查詢,它允許數據庫區分數據的意義和命令的意義,因此即使輸入錯誤並且SQL命令出現在數據中,數據庫知道把它們當作數據。在標準的Java編碼中,這涉及使用PreparedStatements。在SQLite/Android中,您需要使用compileStatement來創建含有數據佔位符(來自不受信任的輸入)的查詢並使用bindString來設置這些佔位符。

更多關於這個在優秀OWASP SQL Injection寫作。

+0

您可以請指導如何清理數據? 根據您的回答「_In SQLite/Android,您需要使用compileStatement來創建您的查詢與數據的佔位符(從不受信任的輸入派生的),並使用bindString來設置這些佔位符._」是否需要使用Content Provider方法delete(),查詢,更新()等? – Priya 2017-01-02 05:14:52

1

這裏同樣適用,因爲它在其他任何地方都有應用,包括互聯網。

您必須非常小心的一件事是您對內容提供商的投入。人們通常會編寫內容提供者,然後使用它們來允許其他人與他們的應用程序進行交互。然而,通常情況下,ContentProvider充當數據庫的接口。這是您絕對需要小心的地方,尤其是如果您允許您的應用程序內容提供商被手機上的其他應用程序訪問。

是的,在用戶可能輸入數據的任何地方,您還需要小心。這包括可編輯文本字段,從互聯網上下載的東西,基本上任何你不能相信的東西。

有一個項目可以進行污染分析,TaintDroid,但它只作爲系統表單存在(即,它基於所有系統上不可用的運行時修改)。但是,目前也有一些研究項目正在進行,旨在追蹤哪些數據流可以幫助您避免此問題。 (Scandroid [1]來命名爲數不多。)

[1] SCanDroid:自動化的Android應用程序的安全認證, www.cs.umd.edu/~avik/papers/scandroidascaa.pdf