保護您的 Android SQL IN 子句
建構 SQL 查詢時,尤其是使用 IN
子句的查詢時,防止 SQL 注入至關重要。 雖然 Android 的 rawQuery
方法使用佔位符 (?),但直接用使用者提供的資料取代它們是一個重大的安全風險。
一個強大的解決方案涉及參數化 IN
子句。 此方法使用產生的佔位符字串,避免在 SQL 查詢本身中直接包含使用者輸入。
安全方法:
產生佔位符: 建立一個包含正確數量的佔位符 (?) 的字串。 像 makePlaceholders(int len)
這樣的輔助函數會產生一個以逗號分隔的 len
問號字串。此函數可確保佔位符字串的格式一致且不受使用者提供的資料的影響。
建置查詢:將產生的佔位符字串整合到您的 SQL 查詢中:
<code class="language-sql">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")";</code>
準備並綁定:準備查詢並將動態值綁定為陣列:
<code class="language-java">Cursor cursor = mDb.rawQuery(query, names);</code>
至關重要的是,names
陣列中的值數量必須與產生的佔位符數量精確匹配。
程式碼範例:
這是 makePlaceholders
函數的範例實作:
<code class="language-java">public static String makePlaceholders(int len) { StringBuilder sb = new StringBuilder(len * 2 - 1); sb.append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); }</code>
此方法動態建構佔位符字串,確保安全查詢執行。 透過使用參數化查詢,您可以有效緩解 SQL 注入漏洞並保護您的 Android 資料庫。
以上是如何在 Android 中安全地參數化 SQL IN 子句?的詳細內容。更多資訊請關注PHP中文網其他相關文章!