#android #android-security
#Android #android-безопасность
Вопрос:
Когда я обновляю свое приложение в Google Play Store, я получил письмо ниже.
Мы проверили ваше приложение и обнаружили, что оно использует программное обеспечение, содержащее уязвимости для пользователей. Приложения с этими уязвимостями могут раскрывать информацию о пользователе или повреждать устройство пользователя и могут считаться нарушением нашей политики вредоносного поведения.
Ниже приведен список проблем и соответствующих версий APK, которые были обнаружены в вашей недавней отправке. Пожалуйста, перенесите свои приложения на использование обновленного программного обеспечения как можно скорее и увеличьте номер версии обновленного APK.
Перенаправление намерений
Ваши приложения уязвимы для перенаправления намерений.
Ниже приведен мой файл build.gradle.
apply plugin: 'com.android.application'
apply plugin: 'com.google.firebase.crashlytics'
android {
compileSdkVersion 28
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
defaultConfig {
applicationId "......."
minSdkVersion 19
targetSdkVersion 29
versionCode 7
versionName "1.0.7"
multiDexEnabled true
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.amazonaws:aws-android-sdk-ddb:2.17.0'
implementation 'com.amazonaws:aws-android-sdk-mobile-client:2.17.0'
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.github.smarteist:autoimageslider:1.3.7'
implementation 'com.github.bumptech.glide:glide:4.11.0'
implementation 'com.google.android.material:material:1.2.0-alpha06'
implementation 'androidx.navigation:navigation-fragment:2.0.0'
implementation 'androidx.navigation:navigation-ui:2.0.0'
implementation 'com.google.android.gms:play-services-maps:17.0.0'
implementation 'com.google.android.gms:play-services-location:17.0.0'
implementation 'com.google.android.libraries.places:places:2.3.0'
implementation 'org.jetbrains:annotations-java5:15.0'
implementation 'com.loopj.android:android-async-http:1.4.9'
implementation 'com.google.maps.android:android-maps-utils:0.6.2'
implementation 'com.google.android:flexbox:2.0.1'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
implementation 'com.wang.avi:library:2.1.3' // Loading Animation
implementation 'com.google.android.gms:play-services-auth-api-phone:17.4.0'
implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:1.0.1'
implementation 'com.razorpay:checkout:1.5.16'
implementation 'com.paytm:pgplussdk:1.4.3'
implementation 'com.android.volley:volley:1.1.1'
implementation 'com.google.firebase:firebase-crashlytics:17.3.0'
implementation 'com.google.firebase:firebase-analytics:18.0.1'
implementation 'io.sentry:sentry-android:3.1.0'
}
Я уже изменил android:exported на false в манифесте Android, а также добавил getPackageName, если проверяет все мои методы GetIntent().
Комментарии:
1. проверьте это, если это поможет support.google.com/faqs/answer/9267555?hl=en
2. Уже пробовали это. Не сработало.
3. это для вашего приложения. вы не опубликовали никакого кода, так как я могу попробовать?
4. пожалуйста, обновите
com.razorpay:checkout
иpaytm:pgplussdk
обновите версию до последней5. Мое обновление приложения было отклонено по следующей причине: ваше приложение содержит уязвимость для перенаправления намерений. Пожалуйста, ознакомьтесь с этой статьей справочного центра Google для получения подробной информации. androidx.fragment.app.FragmentActivity.startActivityForResult. Есть идеи о том, как это выяснить? @Basi
Ответ №1:
Я также получал это предупреждение для своего приложения в прошлом. На самом деле они исследуют ваш код и нашли этот шаблон:
Intent intent = getIntent();
Intent forward = (Intent) intent.getParcelableExtra(“key”);
startActivity(forward);
Я не знаю, как это работает, но вы должны просто избегать шаблона, т.Е. — Не пересылать намерение в parcelable. Возможно, этот шаблон существует в одной из ваших зависимостей, тогда у вас есть некоторые проблемы…
Например, если вы передаете намерение из одного компонента в другой, вы можете временно сохранить его в SharedPreferences , но вместо parcelable вы можете использовать строковое представление намерения, это имеет некоторые ограничения, но работает во многих случаях.
В одном действии:
Intent targetIntent = ...
String representation = targetIntent.toUri(0);
SharedPreferences prefs = getSharedPreferences("intentStore", MODE_PRIVATE);
String key = UUID.randomUUID().toString();
prefs.edit().putString(key, representation).apply();
Intent startIntent = new Intent(this, ActivityB.class);
startIntent.putExtra("intentKey", key);
startActivity(startIntent);
В ActivityB для обработки намерения:
String key = getIntent().getStringExtra("intentKey");
SharedPreferences prefs = getSharedPreferences("intentStore", MODE_PRIVATE);
String representation = prefs.getString(key, null);
// may be need check on null
Intent targetIntent = null;
try {
targetIntent = Intent.parseUri(representation, Intent.URI_ALLOW_UNSAFE);
} catch (URISyntaxException e) {
e.printStackTrace();
}
// handle targetIntent
...
Намерение.URI_ALLOW_UNSAFE требуется, если вы используете некоторые флаги в своем намерении для предоставления некоторых разрешений (например, разрешений на запись для URI-адресов документов).
Возможно, вам необходимо очистить префиксы «intentStore» в методе ActivityB onDestroy.