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

猜你喜欢

转载自blog.csdn.net/qq_35993502/article/details/120927086