È sicuro esporre questi particolari servizi derivati di Firebase?

2

Questa domanda è stata trovato su SO. La risposta non risponde in modo soddisfacente alla domanda e siccome è una sicurezza e una che merita una buona spiegazione tecnica, la sto ripubblicando qui. Per favore fatemi sapere se questo non è appropriato.

Seguendo le istruzioni per gli sviluppatori di Google sull'implementazione di Firebase nella mia app , noto che i filamenti di Android si lamenta.

L'idea è che dobbiamo implementare due servizi che ereditano dai servizi di Firebase:

public class MyFirebaseInstanceIDService extends FirebaseInstanceIdService { ... }

public class MyFirebaseMessagingService extends FirebaseMessagingService { ... }

e quindi registrare tali servizi nel manifest. Ma non è proprio perfetto. In particolare, queste due voci del servizio AndroidManifest.xml consigliate non contengono autorizzazioni speciali:

<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>

e così il linter dice:

Exported services (services which either set exported=true or contain an intent-filter and do not specify exported=false) should define a permission that an entity must have in order to launch the service or bind to it. Without this, any application can use this service.

Devo semplicemente aggiungere questo attributo a ogni tag di servizio e utilizzarlo

tools:ignore="ExportedService"

o c'è un approccio migliore in questa situazione? Voglio dire, è sicuro esporre questi particolari servizi derivati di Firebase come questo?

    
posta deed02392 05.03.2018 - 18:45
fonte

1 risposta

1

Questo potrebbe risolvere il tuo 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: esportato

This element sets whether the activity can be launched by components of other applications — "true" if it can be, and "false" if not. If "false", the activity can be launched only by components of the same application or applications with the same user ID. If you are using intent filters, you should not set this element "false". If you do so, and an app tries to call the activity, system throws an ActivityNotFoundException. Instead, you should prevent other apps from calling the activity by not setting intent filters for it.

If you do not have intent filters, the default value for this element is "false". If you set the element "true", the activity is accessible to any app that knows its exact class name, but does not resolve when the system tries to match an implicit intent.

This attribute is not the only way to limit an activity's exposure to other applications. You can also use a permission to limit the external entities that can invoke the activity (see the permission attribute).

    
risposta data 12.08.2018 - 14:30
fonte

Leggi altre domande sui tag