最近,我了解到android中的原始查询不能阻止SQL注入,因此我决定将所有查询转换为预准备语句,这是SQL注入预防。但是我不知道如何在预准备语句中转换复杂的查询。
我想转换以下查询:
1.
select
*
FROM
TableName
where
(tab1col1 in(SELECT tab2Col2 FROM MasterTable where tab2col1='Y')
or tab1col2 = CV.TRUE)
order by
tab1col3, tab1col4, tab1col5,tab1col6
2.
Select
* ,count(*) as TOTAL_COUNT ,
SUM(CASE WHEN tabCol1 LIKE '%todayDate%' THEN 1 ELSE 0 END) as TOTAL_COL1_COUNT
from
TableName
group by tabCol2;
发布于 2018-06-16 05:32:31
防止SQL注入的唯一方法是使用参数。(在一些PHP中,获取参数的惟一方法是使用预准备语句,但这不是Android数据库API中的一个缺点。)
只需为任意字符串编写?
,并分别传递这些值:
String name = ...;
String password = ...;
cursor = db.rawQuery("SELECT SomeCol FROM Users WHERE Name = ? AND Password = ?",
new String[]{ name, password });
请注意,只有当您的字符串值由(潜在敌意的)用户控制时,才会发生SQL注入。您上面的查询看起来不是这样的。
https://stackoverflow.com/questions/50870916
复制相似问题