Detección de seguridad de Android: riesgo de inyección SQL del proveedor de contenido

En este capítulo, vamos a aprender "Riesgo de inyección SQL del proveedor de contenido".

1. Principio de vulnerabilidad

En primer lugar, lo que necesitamos saber es que la entrada del usuario no es segura. Necesitamos verificarla. Cuando pase la verificación, podemos considerarla aproximadamente segura. Entonces, ¿qué tiene esto que ver con nuestro capítulo? En De hecho, la ocurrencia de la inyección SQL es causada por la entrada irregular del usuario (por supuesto, si ocurre la inyección, esto también es un problema con el programa mismo).Si las condiciones SQL ingresadas por el usuario no se verifican en el programa, el el usuario puede construir algún comando SQL, luego conducirá a la inyección SQL. La vulnerabilidad de inyección SQL del proveedor de contenido está causada por lo siguiente:

  • Los componentes del proveedor de contenido son exportables
  • Se utiliza como parte de la instrucción SQL sin comprobar si el valor de entrada se ajusta a la especificación, por ejemplo:
    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);

Cuando se cumplan los dos puntos anteriores, habrá riesgo de inyección SQL

2. Método de detección

step1:Escanee el código global para ver si hay un componente de proveedor de contenido exportado.
step2:Si hay un componente de proveedor de contenido exportado, determine si hay un valor de entrada no verificado en la instrucción SQL. Si lo hay, existe un riesgo.
step3:resumen de resultados

3. Método de reparación

1. Para los componentes del proveedor de contenido que no necesitan exportarse, se recomienda mostrar y establecer el atributo "android:exportado" del componente en falso. 2. Cuando
el componente se puede exportar, se recomienda utilizar selectionArgs para parametrizar y componer sentencias SQL, por ejemplo:
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

Supongo que te gusta

Origin blog.csdn.net/qq_35993502/article/details/120927086
Recomendado
Clasificación