Warum ist eine Fragmentklasse möglicherweise nicht gültig?

8

Ich habe gerade eine PreferenceActivity mithilfe des AndroidStudio-Assistenten erstellt. Beim Ausführen dieser Option wurde eine seltsame Ausnahme ausgelöst:

%Vor%

ich sah vorgeschlagene Lösungen hier , aber ich fragte mich, warum ich überprüfen müsste, ob meine fragment-klassen sind gültig, da ich nicht einmal vollständig verstehe, was die definition von "gültig" ist, also habe ich mich entschieden, die gemeinschaft zu fragen:

a PreferenceActivity hat isValidFragment(String fragmentName) Methode, die aus irgendeinem Grund überschrieben werden muss, warum? Wie könnte eine Fragmentklasse nicht gültig sein? und was könnte mit einer solchen Überschreibung schief gehen:

%Vor%     
Ofek Ron 25.09.2015, 10:46
quelle

3 Antworten

2

Warum?

PreferenceActivity hatte seine Sicherheit beeinträchtigt und isValidFragment(String name) wurde als Antwort bereitgestellt.

Genauer gesagt aus der Offenlegung der Sicherheitslücke:

  

Jede App, die eine Aktivität implementiert und exportiert   das erweitert eine PreferenceActivity-Klasse   kann untergeordnet werden, um eine beliebige Klasse zu laden   Ausnutzen des dynamischen Fragmentladeprozesses.

Das Sicherheitsproblem bedeutete, dass eine Rogue-Anwendung Ihre PreferenceFragments instanziieren konnte und sie ihre Extrakosten von den tatsächlichen Eltern erhielten, die Daten ausliefern.

Als Patch wurde isValidFragment(String name) erstellt, so dass Sie gezwungen sind, entweder eine weiße Liste mit "sicheren" Fragmenten bereitzustellen oder, wenn Sie immer "True" zurückgegeben haben, das Risiko einzugehen, dass Ihre Anwendung kompromittiert wird.

Es wird nur benötigt, um KitKat zu starten, wenn der Patch eingeführt wurde.

Wie konnte eine Fragmentklasse nicht gültig sein?

Einen Namen haben, der Ihrer App fremd ist.

Was könnte schiefgehen?

Jemand könnte Ihre App mit der in pdf durch @Sree in den Kommentaren verknüpft.

    
Guillermo Orellana Ruiz 25.09.2015, 11:18
quelle
0

Ich denke, es ist eine ganz neue Klasse, die von der alten SDK-Version möglicherweise nicht unterstützt wird.

Wie google-Dokument sagt:

  

Die Standardimplementierung gibt true für Apps zurück, für die sie erstellt wurden   android: targetSdkVersion älter als KITKAT. Für spätere Versionen, es   wird eine Ausnahme auslösen.

Aber ich bin mir nicht sicher, ob es auch andere Fälle gibt, die einen Wurf verursachen.

    
CbL 25.09.2015 10:56
quelle
0

Von developer.android.com:

  

Unterklassen sollten diese Methode überschreiben und sicherstellen, dass das angegebene Fragment ein gültiger Typ ist, der an diese Aktivität angehängt werden soll. Die Standardimplementierung gibt true für Apps zurück, die für android: targetSdkVersion älter als KITKAT erstellt wurden. Für spätere Versionen wird eine Ausnahme ausgelöst.

Grundsätzlich sollten Sie bei TargetSDK & lt; = KITKAT sicherstellen, dass der Fragmentname isValidFragment passes korrekt ist.

    
loGi 25.09.2015 10:58
quelle

Tags und Links