安全参数化 Android SQL 中的 IN 子句
在 Android 的 SQL IN
子句中使用动态数据需要仔细处理以防止 SQL 注入漏洞。 本指南演示了使用占位符的安全方法。
利用占位符确保安全
最安全的方法是创建一个占位符字符串,并用逗号分隔问号。 占位符的数量直接与 IN
子句中的值的数量匹配。然后,该字符串将集成到您的 SQL 查询中,确保您的数据免受注入攻击。
实际示例
假设您有一个生成此占位符字符串的函数 makePlaceholders(int len)
。 此函数可确保问号字符串格式正确,无论值的数量如何。使用方法如下:
<code class="language-java">String query = "SELECT * FROM table WHERE name IN (" + makePlaceholders(names.length) + ")"; Cursor cursor = mDb.rawQuery(query, names);</code>
makePlaceholders
功能实现
makePlaceholders
函数的可能实现是:
<code class="language-java">String makePlaceholders(int len){ if (len < 1) { throw new IllegalArgumentException("Length must be at least 1"); } else if (len == 1) { return "?"; } else { StringBuilder sb = new StringBuilder(len * 2).append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); } }</code>
这确保了占位符的正确数量并防止边缘情况(单值)的错误。 使用此方法提供了一种灵活且安全的方式来处理 IN
子句中的动态数据,从而防止 SQL 注入。
以上是如何安全地参数化 Android SQL 查询中的 IN 子句?的详细内容。更多信息请关注PHP中文网其他相关文章!