Android安全检测-Content Provider SQL注入风险
这一章我们来学习“ Content Provider SQL注入风险”。
一、漏洞原理
首先,我们需要知道的是来自用户的输入都是不安全的,我们需要对其进行校验,当校验通过时我们可以近似的认为是安全,那这与我们这一章有什么关系呢,其实SQL注入的发生就是源于用户的不规范输入所导致的(当然若发生了注入情况这也是程序本身的问题),若在程序中未校验用户输入的SQL条件,用户就可以构造一些SQL命令,那么就会导致SQL注入的发生。Content Provider SQL注入漏洞产生的因如下:
- Content Provider组件是可导出的
- 未校验输入值是否符舍规范,就作为SQL语句的一部分,例如:
String inputUserName = "123'or'1=1";
String inputPassword = "123";
String sql = "select *from user where username='"+inputUserName +"' and password='"+inputPassword+"'";
Cursor cursor = db.rawQuery(sql);
以上两点均满足的情况下,就会产生SQL注入风险
二、检测手段
step1:
扫描全局代码,是否存在导出的Content Provider组件
step2:
若存在导出的Content Provider组件,则判断SQL语句中是否有未校验的输入值,若存在则存在风险。
step3:
汇总结果
三、修复方法
1、不需要导出的Content Provider组件,建议显示设置组件的“android:exported”属性为false
2、当组件可导出时,建议使用selectionArgs进行参数化组成SQL语句,例如:
String inputUserName = "xxxx";
String inputPassword = "xxxx";
String sql = "select *from user where username=? and password=?";
Cursor cursor = db.rawQuery(sql,new String[]{username,password});
asjhan for Android reverse