Seguridad en aplicaciones Android: Custom permissions


La plataforma Android dispone de una serie de premisos por defecto que se utilizan para asegurar los servicios del sistema y componentes de aplicaciones.
Esto normalmente suele ser suficiente protección en la mayoría de casos, pero a menudo necesitamos compartir componentes entre aplicaciones y es aquí donde entra la falla de seguridad, puesto que tendremos expuestas nuestras aplicaciones.
Para suplirlo podemos generar nuestros propios permisos, que evitaran que cualquiera puede acceder a nuestra aplicación.
Primero de todo crearemos el label en strings.xml:
<string name="custom_permission_label">Custom Permission</string>.
Añadimos el permiso a nuestra aplicación en el AndroidManifest.xml:
<permission android:name="android.permission.CUSTOM_PERMISSION" android:protectionLevel="normal" android:description="My custom permission" android:label="@string/custom_permission_label">
Donde la etiqueta android:protectionLevel puede tener los siguientes valores:
- normal: Este permiso se usa para definir accesos no-peligrosos.
- dangerous: Se utiliza para definir permisos que exponen al usuarios en riesgo fiscal y legal.
- signature: Garantiza autonomía a aplicaciones que está firmadas con la misma key que la aplicación que lo define.
- signatureOrSystem: Este permiso está definido para cualquier aplicaciones que forme parte del sistema o está firmada con la misma key que la aplicación que lo define.
Si solo queremos compartir nuestros componentes entre aplicaciones que nosotros mismos hemos desarrollado, usaremos la etiqueta signature.
Y para hacer uso de dicho permiso en cualquier componente podremos hacerlo como como en el resto de los permisos:
<component... android:permission="android.permission.CUSTOM_PERMISSION"> </component> Donde component puede ser un Activity, Content Provider, Service... Más información: Para ver más a fondo la información sobre los permisos visitar la documentación.