¿Es seguro exponer estos servicios derivados de Firebase en particular?

2

Esta pregunta era encontrado en SO. La respuesta no responde satisfactoriamente a la pregunta y, dado que es una cuestión de seguridad que merece una buena explicación técnica, la estoy repostando aquí. Por favor, avíseme si esto no es apropiado.

Siguiendo las instrucciones para desarrolladores de Google sobre la implementación de Firebase en mi aplicación , me doy cuenta de que hay una pelusa en Android quejas

La idea es que tenemos que implementar dos servicios que heredan de los servicios de Firebase:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }

public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }

y luego registrar esos servicios en el manifiesto. Pero, no es del todo perfecto. En particular, estas dos entradas del servicio AndroidManifest.xml recomendadas no contienen ningún permiso especial:

<service android:name=".MyFirebaseMessagingService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service android:name=".MyFirebaseInstanceIDService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

y así la plantilla dice:

  

Los servicios exportados (los servicios que configuran exportado = verdadero o contienen un filtro de intento y no especifican exportado = falso) deben definir un permiso que una entidad debe tener para iniciar el servicio o vincularlo. Sin esto, cualquier aplicación puede utilizar este servicio.

¿Debo agregar este atributo a cada etiqueta de servicio y terminar con él?

tools:ignore="ExportedService"

o hay un mejor enfoque en esta situación? Quiero decir, ¿es seguro exponer estos servicios derivados de Firebase en particular como este?

    
pregunta deed02392 05.03.2018 - 18:45
fuente

1 respuesta

1

¡Esto puede resolver tu problema!

<service android:name=".MyFirebaseMessagingService"
 tools:ignore="ExportedService">
    <intent-filter>
        <action android:name="com.google.firebase.MESSAGING_EVENT"/>
    </intent-filter>
</service>

<service android:name=".MyFirebaseInstanceIDService"
 tools:ignore="ExportedService">
    <intent-filter>
        <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
    </intent-filter>
</service>

android:exported

  

Este elemento establece si la actividad puede ser iniciada por componentes.   de otras aplicaciones: "verdadero" si puede ser, y "falso" si no lo es. Si   "Falso", la actividad solo puede ser lanzada por componentes del mismo.   Aplicación o aplicaciones con el mismo ID de usuario. Si estas usando   filtros de intención, no debe establecer este elemento "falso". Si tu haces eso,   y una aplicación intenta llamar a la actividad, el sistema lanza un   ActivityNotFoundException. En su lugar, debe evitar que otras aplicaciones   llamando a la actividad al no establecer filtros de intención para ella.

     

Si no tiene filtros de intención, el valor predeterminado para este elemento   Es falso". Si establece el elemento "verdadero", la actividad es accesible   a cualquier aplicación que sepa su nombre de clase exacto, pero no se resuelve cuando   el sistema intenta coincidir con una intención implícita.

     

Este atributo no es la única manera de limitar la exposición de una actividad a   otras aplicaciones. También puede utilizar un permiso para limitar el   Entidades externas que pueden invocar la actividad (ver el permiso   atributo).

    
respondido por el KUSHA B K 12.08.2018 - 14:30
fuente

Lea otras preguntas en las etiquetas