【发布时间】:2018-08-01 10:43:30
【问题描述】:
我有 2 个应用程序。第二个应用程序通过内容提供程序与第一个应用程序交互以获取一些凭据。今天在 playstore 上传我的 apk 时出现错误-SQL 注入 您的应用正在使用包含 SQL 注入漏洞的内容提供程序。 要解决此问题,请按照此Google Help Center article 中的步骤操作。
现在我执行了文章中提到的所有步骤,但仍然遇到相同的错误。具体步骤如下:
如果受影响的 ContentProvider 需要暴露给其他应用:
您可以使用
防止 SQL 注入 SQLiteDatabase.query 带有投影图的严格模式。严格模式防止
恶意选择子句和投影图防范
恶意投影条款。您必须同时使用这两个功能才能 确保您的查询是安全的。您可以防止 SQL 注入到 SQLiteDatabase.update 和 SQLiteDatabase.delete 使用使用“?”的选择子句 作为可替换参数和单独的选择数组 论据。不应构建您的选择子句 来自不受信任的输入。
我的 SQLiteQueryBuilder 带有 set strict = true 和投影图。
private static final HashMap<String,String> values;
static {
values = new HashMap<String, String>();
values.put("_id", "_id");
values.put("name", "name");
}
@Override
public Cursor query(@NonNull Uri uri, @Nullable String[] projection, @Nullable String selection, @Nullable String[] selectionArgs, @Nullable String sortOrder) {
SQLiteQueryBuilder qb = new SQLiteQueryBuilder();
qb.setTables(TABLE_NAME);
qb.setStrict(true);
switch (uriMatcher.match(uri)) {
case uriCode:
qb.setProjectionMap(values);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
if (sortOrder == null || sortOrder == "") {
sortOrder = name;
}
Cursor c = qb.query(db, projection, selection, selectionArgs, null,
null, sortOrder);
c.setNotificationUri(getContext().getContentResolver(), uri);
return c;
}
【问题讨论】:
-
你的问题解决了吗?
-
是的,我已经解决了这个问题。
-
@RishabhLashkari 你能分享你的解决方案吗? (我自己也有同样的问题)。谢谢!
-
@sunyata 我不得不想办法找到答案。尽管我的提供者从未使用过更新和删除查询,但我应该以 Pitos 提到的方式编辑它们。所以不能有任何带有sql漏洞的查询,严格模式必须为真,并且必须使用投影图。
标签: android