2017-02-09 3 views
1

Wie Sie wissen, Android-Entwickler:Fix Fragment Injection-Schwachstelle in Xamarin Android

Ab 1. März 2017 wird Google blockieren Wiedergabe Veröffentlichung sämtlicher neuen Apps oder Updates, bei denen PreferenceActivity Klassen Fragment Injection anfällig sein kann

In der Seite https://support.google.com/faqs/answer/7188427 gibt es einige Hinweise, wie man diese Schwachstelle beheben kann aber was ist mit den Anwendungen, die mit Xamarin entwickelt wurden?

Ich konnte dazu keine Informationen finden. Er sagt, dass meine betroffene Klasse ist SettingActivity, die von PreferenceActivity erbt, und meine Klasse SettingActivity ist dies:

[Activity(
    Label = "@string/ApplicationName", 
    Icon = "@drawable/ic_launcher", 
    Theme = "@android:style/Theme.Holo.Light", 
    ParentActivity = typeof(MainActivity))] 
[IntentFilter(
    new [] {Intent.ActionManageNetworkUsage}, 
    Categories= new [] {Intent.CategoryDefault} 
)] 
public class SettingsActivity : PreferenceActivity 
{ 
    public static readonly string KeyWifiOnly = "pref_wifi_only"; 

    protected override void OnCreate(Bundle savedInstanceState) 
    { 
     base.OnCreate(savedInstanceState); 
     AddPreferencesFromResource(Resource.Xml.preferences); 

     ActionBar.SetHomeButtonEnabled(true); 
     ActionBar.SetDisplayHomeAsUpEnabled(true); 

     PreferenceManager.SetDefaultValues(this, Resource.Xml.preferences, false); 

     SetupNetworkPreferences(); 
    } 

    private void SetupNetworkPreferences() 
    { 
     var prefs = PreferenceManager.GetDefaultSharedPreferences(this); 

     ListPreference list = FindPreference(
      AppSettings.PreferenceNetworkProvider) as ListPreference; 

     list.SetEntries(
      Enum.GetNames(typeof(AppSettings.FtpHostNetwork))); 

     list.SetEntryValues(Enum 
      .GetValues(typeof(AppSettings.FtpHostNetwork)) 
      .Cast<int>() 
      .Select(x => x.ToString()) 
      .ToArray()); 
    } 

    protected override void OnResume() 
    { 
     base.OnResume(); 

     var tracker = (Application as App).Tracker; 
     tracker.Screen("PantallaPreferencias"); 
    } 
} 
+1

Versuchen gesetzt Export auf false '[Aktivität ( Label = "@ Zeichenfolge/Application", Exportiert = false, Icon = "@ ziehbar/ic_launcher", Theme =„@android: Stil/Thema. Holo.Light“, Parent = typeof (MainActivity))] [IntentFilter ( new [] {} Intent.ActionManageNetworkUsage, Kategorien = new [] {} Intent.CategoryDefault )]' –

+0

Ja, das ist der Trick . Vielen Dank Mike. Du hast gerade meinen Job gerettet – GalloPinto

Antwort

0

Wie in den Kommentaren von Mike Ma vorgeschlagen:

die exportierte = false enden Objekt Hinzufügen funktionierte gut .

[Activity(Label = "@string/ApplicationName", Exported =false, Icon = "@drawable/ic_launcher", Theme = "@android:style/Theme.Holo.Light", ParentActivity = typeof(MainActivity))]