0

在 android 内容提供者指南中,它说从数据库中选择数据时,不要使用String mSelectionClause = "var = " + mUserInput,因为如果mUserInput是,nothing; DROP TABLE *;那么整个表将被删除。

所以推荐这种方式:

String mSelectionClause = "var = ?";
String[] selectionArgs = {""};
selectionArgs[0] = mUserInput;

我不明白,所以如果值为 ,mUserInputnothing; DROP TABLE *;不会做同样的事情String mSelectionClause = "var = nothing; DROP TABLE *;"吗?

4

1 回答 1

0

查询中的问号不是直接用值(mUserInput)代替的!

数据库和/或执行(代码)库的内部机制知道如何使提供的值安全,以防止SQL 注入和其他恶意攻击。

注意:此技术不是 Android 特定的,但(或至少应该)能够用于所有编程语言/环境中的所有数据库。

于 2012-11-10T23:12:02.523 回答