Application prevents taking screenshots
L'application empêche la prise de captures d'écran
Description
L'application empêche de manière programmatique les captures d'écran, ce qui empêche l'AI Monkey Tester (le robot mobile automatisé d'Ostorlab) de calculer la couverture.
Les applications Android peuvent bloquer par programmation la prise de captures d'écran :
- Utiliser l'indicateur de fenêtre
FLAG_SECURE:
En définissant l'indicateur de fenêtre FLAG_SECURE, vous pouvez empêcher le contenu de la fenêtre de votre application d'apparaître dans les captures d'écran ou d'être affiché sur des écrans non sécurisés.
Pour définir l'indicateur de fenêtre FLAG_SECURE, vous pouvez appeler setFlags() sur votre objet Window et passer l'indicateur FLAG_SECURE. Par exemple :
getWindow().setFlags(WindowManager.LayoutParams.FLAG_SECURE,
WindowManager.LayoutParams.FLAG_SECURE);
Notez que cela empêchera également le contenu de la fenêtre de votre application d'être enregistré par des applications d'enregistrement d'écran.
- Utiliser l'API
MediaProjection:
L'API MediaProjection vous permet de capturer le contenu de l'écran de l'appareil en temps réel. En utilisant cette API, vous pouvez bloquer par programmation la prise de captures d'écran en ne démarrant tout simplement pas la session de capture d'écran lorsque l'utilisateur tente d'en prendre une.
Pour utiliser l'API MediaProjection, vous devrez demander la permission CAPTURE_SCREENSHOT ou CAPTURE_VIDEO_OUTPUT, selon votre cas d'utilisation. Vous pouvez ensuite créer un objet MediaProjection et appeler start() pour commencer la session de capture d'écran.
MediaProjectionManager mediaProjectionManager =
(MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
Intent permissionIntent = mediaProjectionManager.createScreenCaptureIntent();
startActivityForResult(permissionIntent, REQUEST_SCREENSHOT);
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == REQUEST_SCREENSHOT) {
if (resultCode == RESULT_OK) {
// Start the screen capture session
MediaProjection mediaProjection = mediaProjectionManager.getMediaProjection(resultCode, data);
mediaProjection.start();
}
}
}
Vous pouvez ensuite arrêter la session de capture d'écran en appelant stop() sur l'objet MediaProjection.
- Utiliser l'API
MediaProjectionManager:
L'API MediaProjectionManager fournit un service système qui vous permet de gérer les sessions de capture d'écran. Vous pouvez utiliser cette API pour bloquer par programmation la prise de captures d'écran en vérifiant si une session de capture d'écran est active avant de permettre à l'utilisateur de prendre une capture d'écran.
Pour utiliser l'API MediaProjectionManager, vous pouvez appeler isProjectionActive() pour vérifier si une session de capture d'écran est actuellement active. Si une session de capture d'écran est active, vous pouvez empêcher l'utilisateur de prendre une capture d'écran.
MediaProjectionManager mediaProjectionManager =
(MediaProjectionManager) getSystemService(Context.MEDIA_PROJECTION_SERVICE);
if (mediaProjectionManager.isProjectionActive()) {
// A screen capture session is active, so prevent the user from taking a screenshot
} else {
// A screen capture session is not active, so allow the user to take a screenshot
}
Recommandation
Cette entrée est informative, aucune recommandation applicable.
Liens
- Android Developer FLAG_SECURE
- Android Developer MediaProjection
- Android Developer MediaProjectionManager
Normes
- OWASP_MASVS_L1:
- MSTG_PLATFORM_4
- OWASP_MASVS_L2:
- MSTG_PLATFORM_4
- OWASP_MASVS_v2_1:
- MASVS_PLATFORM_1
- HIPAA_CONTROLS:
- SECURITY212
- SECURITY215