Y a-t-il les mêmes restrictions sur JavaScript dans Android Chrome que dans Windows ?
Les applications sur Android sont déjà conteneurisées dans de multiples sandboxes, qu'il s'agisse d'un navigateur web ou d'une autre application. Il y a le robuste contrôle d'accès discrétionnaire du noyau Linux ( DAC ) ; UIDs / GIDs / modes, complétés par le contrôle d'accès obligatoire ( MAC ) ; SELinux. La machine virtuelle Java de chaque application (le processus natif) fonctionne avec son propre UID et son propre contexte SELinux. Android fait également appel à Linux espaces de noms , capacités y seccomp . Voir Application Sandbox .
En plus de cela, Android possède son propre cadre de contrôle des autorisations. L'accès aux ressources du système, aux périphériques et aux systèmes de fichiers est régi par une longue liste d'autorisations. autorisations du manifeste comme l'espace de stockage, l'appareil photo, les contacts, etc. niveaux de protection . Voir Permissions .
Ainsi, toute restriction supplémentaire imposée au code interne des applications (comme en JS) n'apporte aucune amélioration significative sur Android.
D'après votre commentaire :
Mais si toutes les applications Android sont sandboxées, comment une personne peut-elle télécharger un fichier sur un site web ?
C'est possible grâce à la fonction stockage partagé externe qui n'est accessible aux applications qu'après autorisation de l'utilisateur.
En bref, si j'accorde une autorisation de stockage au navigateur X et que j'ouvre une application web Y dans ce navigateur, cela signifie-t-il que Y peut également accéder à mes médias, mes fichiers, etc.
Définitivement oui. Il n'y a aucune restriction du côté du système d'exploitation. Une application web s'exécute dans un navigateur web. Un navigateur web est une application Android ordinaire. Lorsqu'une application Android démarre, un processus UNIX natif est créé, qui est soumis à toutes les restrictions DAC, MAC et autres au niveau du noyau. Une application Web exécutée dans le même processus natif n'est pas une entité distincte. Du point de vue du système d'exploitation, l'ensemble du processus natif constitue une seule unité. Les mêmes restrictions s'appliquent donc à l'ensemble du code de ce processus, qu'il soit écrit en Java, JS, C, Python ou tout autre langage.
JavaScript mis à part, existe-t-il un autre moyen pour une PWA, une application web ou un site web de visualiser le contenu de mon stockage interne sans ma permission ?
Eh bien, nous devons d'abord définir mon y mémoire interne .
Le DAC sur les systèmes d'exploitation de bureau (au moins sur Windows et Linux) est différent de celui sur Android. Sur les OS de bureau, les fichiers appartiennent aux utilisateurs humains. Ainsi, lorsque vous dites mes fichiers Cela signifie qu'un identifiant (UID/GID) leur est attribué, qui représente un utilisateur humain. Et tous les programmes exécutés par un utilisateur humain fonctionnent également avec le même UID, de sorte qu'ils peuvent accéder aux fichiers des autres. C'est pourquoi des restrictions supplémentaires (telles que l'amélioration de JS dans Chrome, comme vous l'avez mentionné, et l'utilisation par Firefox des espaces de noms Linux, etc.) sont imposées aux programmes, en particulier à ceux qui ont une interface avec l'internet, par exemple les navigateurs web. Vérifiez également firejail .
Mais sur Android, ce sont les applications qui sont isolées les unes des autres, pas les utilisateurs humains. Chaque application se voit attribuer un UID/GID unique et les fichiers appartiennent aux applications. Pour plus de détails, voir ma réponse à Les utilisateurs multiples sont-ils protégés les uns des autres différemment des applications ? .
En ce qui concerne le stockage, Android stocke les configurations, les applications et les données dans des partitions montées à l'emplacement suivant /data
qui n'est pas accessible sans rooting ( Pourquoi les droits de superutilisateur sont-ils nécessaires pour accéder à la partition /data ? ). Les applications ont leur stockage privé (en /data/data/
) qui n'est accessible à aucune autre application car le répertoire de chaque application a son propre UID/GID qui appartient à l'application propriétaire (c'est ainsi que le DAC fonctionne).
Afin de partager des fichiers entre les applications, Android fournit un système sans permission. émulé système de fichiers appelé stockage partagé externe . Il s'agit d'un stockage physiquement interne ( /data/media
) accessible à l'adresse /sdcard/
( primaire ), ou en plus peut être une carte SD physiquement externe ( secondaire ). Le stockage partagé externe contient répertoires privés qui appartiennent à des applications individuelles. Ces répertoires sont à la disposition des applications sans qu'aucune permission ne soit requise. Le reste des répertoires publics ne sont accessibles qu'aux applications auxquelles on a accordé Autorisation de stockage ( READ_EXTERNAL_STORAGE
y WRITE_EXTERNAL_STORAGE
) par l'utilisateur.
Cependant, l'accès au niveau du système de fichiers à l'ensemble des /sdcard
est très déprécié dans Android 10 et 11 en raison de sa nature générale. Il y a maintenant MediaStore y Cadre d'accès au stockage (SAF) qui fournissent aux applications un accès même limité aux fichiers sur le stockage partagé externe. Pour plus de détails, voir mes réponses à Où les applications Android stockent-elles les données ? , Le parcours de stockage d'Android y Qu'est-ce que l'UID "u#_everybody" ? .
Donc :
- Accès aux fichiers créés/téléchargés par une application dans sa base de données. stockage privé o répertoires privés dans le stockage externe n'est jamais limitée.
- Accès aux fichiers des autres applications dans stockage privé n'est jamais possible.
- Accès aux dossiers dans stockage externe public o stockage externe privé d'autres applications est soumise à l'autorisation accordée à l'application par l'utilisateur.