aboutsummaryrefslogtreecommitdiff
path: root/files/fr/archive/b2g_os/securite/application_security/index.html
blob: 07b15909b5e6f286586e6e65cb7ced0d629d0508 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
---
title: La sécurité des applications
slug: Archive/B2G_OS/securite/Application_security
tags:
  - Apps
  - Firefox OS
  - Guide
  - Mobile
  - Security
translation_of: Archive/B2G_OS/Security/Application_security
---
<div class="summary">
<p><span id="result_box" lang="fr"><span class="hps">Cet article explique</span> en détail <span class="hps">le modèle de sécurité</span> <span class="hps">des application</span>s <span class="hps">Firefox</span> <span class="hps">OS</span><span>.</span></span></p>
</div>

<p><span id="result_box" lang="fr"><span class="hps">Les</span> <span class="hps">contrôles de sécurité</span> <span class="hps">d'applications</span> <span class="hps">web</span> <span class="alt-edited hps">introduites dans</span> <span class="hps">Firefox</span> <span class="hps">OS</span> <span class="hps">sont</span><span> les suivants :</span></span></p>

<ul>
 <li>Les applications web sont explicitement installées et lancées plutôt que simplement chargées depuis un navigateur. Les applications doivent être installées avant toute utilisation et les contrôles de sécurité régissent la mise à jour et la suppression des applications afin de protéger l'utilisateur.</li>
 <li><span id="result_box" lang="fr"><span class="hps">L'accès aux nouvelles</span> <span class="hps">API web</span> <span class="hps">est contrôlé par un</span> <span class="hps">système de permissions</span><span>,</span> <span class="hps"></span> <span class="hps">une application</span> <span class="hps">doit déclarer</span> <span class="hps">les</span> <span class="hps">autorisations</span> <span class="hps">qu'elle veut utiliser</span> <span class="hps">avant l'installation.</span> <span class="hps">Afin</span> <span class="hps">d'avoir accès à</span> certaines<span class="hps"> API</span>, <span class="hps">les</span> <span class="hps">applications</span> <span class="hps">doivent respecter certaines exigences</span> <span class="hps">et</span> <span class="hps">être examinées</span><span>, approuvées et</span> <span class="hps">signées par</span> <span class="hps">le Marketplace</span><span>.</span></span></li>
 <li>Les applications web sont mises dans une <a href="https://fr.wikipedia.org/wiki/Sandbox_%28s%C3%A9curit%C3%A9_informatique%29">sandbox</a> afin qu'elles ne voient que leurs propres ressources (cookies, base de données IndexedDB, etc.). Même si deux applications chargent la même URL, ces deux pages ne seront pas considérées comme provenant de la même origine car elles sont en cours d'exécution sur des applications différentes.</li>
</ul>

<h3 id="Types_d'applications">Types d'applications</h3>

<p>Firefox OS supporte trois types d'applications : <strong>web</strong>, <strong>privilégiée</strong> et <strong>certifiée</strong>. Le type d'application est déclaré dans le <a href="/fr/Apps/Manifeste">manifeste d'application</a> et indique la liste des permissions que chaque application peut demander.</p>

<ul>
 <li><strong><strong>Application </strong>web :</strong> La plupart des applications tierces sont des applications "web". C'est le type par défaut qui ne nécessite pas d'autorisations supplémentaires en plus de celles déjà en place sur le web. Les applications web peuvent être installées à partir de n'importe quel site web, sans autre vérification. Elles peuvent aussi être <a href="https://developer.mozilla.org/fr/Marketplace/Options/Packaged_apps">empaquetées</a>, mais cela n'induira pas d'autres autorisations.</li>
 <li><strong><strong><strong>Application p</strong></strong>rivilégiée</strong> : Les applications sont autorisées à demander des autorisations accrues. Ces applications privilégiées doivent être vérifiées et signées par le Marketplace.</li>
 <li><strong><strong><strong>Application</strong></strong> certifiée : </strong>Les applications certifiées sont obligatoirement préinstallées sur le périphérique par le constructeur/opérateur qui diffuse le téléphone.</li>
</ul>

<div class="note">
<p><strong>Note</strong> : Pour plus de détails sur les différents types d'applications, voir la documentation du <a href="https://developer.mozilla.org/fr/Apps/Manifeste#type">manifeste d'application</a>.</p>
</div>

<h3 id="Mettre_une_application_à_disposition">Mettre une application à disposition</h3>

<p>Sous Firefox OS, les applications peuvent être mises à disposition de deux façons différentes : hébergées ou empaquetées. Les applications web classiques peuvent être mises à disposition via deux mécanismes, les applications privilégiées et certifiées en revanche doivent être empaquetées.</p>

<h4 id="Les_applications_hébergées"><span class="mw-headline" id="Hosted_apps">Les applications hébergée</span>s</h4>

<p><span id="result_box" lang="fr"><span class="hps">Une application</span> <span class="hps">hébergée</span> <span class="hps">est constituée uniquement</span> <span class="hps">d'un fichier</span><a href="https://developer.mozilla.org/fr/Apps/Manifeste"> <span class="hps">manifeste</span></a> <span class="hps">sur le serveur</span> <span class="hps">web</span> <span class="hps">du développeur,</span> <span class="hps">qui contient un</span> <a href="https://developer.mozilla.org/fr/Apps/Manifeste#launch_path"><span class="hps">launch_path</span></a> <span class="hps">pour</span> <span class="hps">indiquer quelles page</span>s <span class="hps">doivent figurer</span> <span class="hps">lorsque l'application</span> <span class="hps">est lancée</span><span>.</span> <span class="hps">D'un point de</span> <span class="hps">vue de la sécurité</span><span>,</span> <span class="hps">les applications</span> <span class="hps">hébergées</span> <span class="hps">fonctionnent </span> <span class="hps">presque comme des sites</span> <span class="hps">web</span> <span class="hps">normaux</span><span>.</span> Lorsqu'u<span class="hps">ne application</span> <span class="hps">hébergée est</span> <span class="hps">chargée</span><span>,</span> <span class="hps">se sont</span> <span class="hps">les URL</span> <span class="hps">« normales</span> <span class="hps">» de ces</span> <span class="hps">pages</span>, qui sont chargées. Elles sont <span class="hps">chargées depuis le serveur web, ou depuis </span><span class="hps">l'appareil</span> <span class="hps">si elles </span>étaient stockées<span class="hps"> dans un</span> <span class="hps">fichier cache</span><span>.</span></span></p>

<h4 id="Les_applications_empaquetées"><span class="mw-headline" id="Packaged_apps">Les applications empaquetées</span></h4>

<p><span id="result_box" lang="fr"><span class="hps">Une application</span> <span class="alt-edited hps">empaquetée</span> <span class="hps">est</span> <span class="hps">un application web ayant l'ensemble de ses </span><span class="hps">ressources</span> <span class="atn hps">(</span><span>HTML</span><span>,</span> <span class="hps">CSS</span><span>,</span> <span class="hps">JavaScript</span><span>, manifeste</span> <span class="hps">et</span> <span class="hps">ainsi de suite</span><span>)</span> <span class="hps">contenues dans</span> <span class="hps">un fichier zip</span><span> (les ressources ne sont pas présentes </span><span class="hps">sur</span> <span class="hps">un serveur web)</span><span>.</span> <span class="hps">Pour plus de détails</span> <span class="hps">sur ce format</span><span>,</span> <span class="hps">voir</span> <span class="hps">la page sur les <a href="https://developer.mozilla.org/fr/Marketplace/Options/Packaged_apps">applications empaquetées</a></span>. </span></p>

<h3 id="Origine_de_l'application">Origine de l'application</h3>

<p><span id="result_box" lang="fr"><span class="hps">Pour les applications</span> <span class="hps">hébergées</span><span>,</span> <span class="hps">l'origine</span> <span class="hps">de l'application</span> correspond à<span class="hps"> l'origine</span> <span class="hps">du <a href="https://developer.mozilla.org/fr/Apps/Manifeste#origin">manifeste</a></span><a href="https://developer.mozilla.org/fr/Apps/Manifeste#origin"> <span class="hps">de l'application</span></a><span>.</span> </span></p>

<p><span id="result_box" lang="fr"><span class="hps">Pour</span> les<span class="hps"> applications</span> empacketées<span>,</span> l'<span class="hps">origine est affectée de façon unique à l'application lors de l'installation. </span><span class="hps">Les applications</span> <a href="https://developer.mozilla.org/fr/Apps/Publishing/Packaged_Apps#Types_of_packaged_apps"><span class="hps">privilégiées</span> <span class="hps">et</span> </a><span class="hps"><a href="https://developer.mozilla.org/fr/Apps/Publishing/Packaged_Apps#Types_of_packaged_apps">certifiées</a> peuvent</span> <span class="hps">également demander</span> <span class="hps">une origine</span> <span class="hps">spécifique</span> <span class="hps">en spécifiant le paramètre</span> <span class="hps"><a href="https://developer.mozilla.org/fr/Apps/Manifeste#origin">origin</a></span> <span class="hps">dans le fichier manifeste de l'application.</span> </span></p>

<h3 id="Installation_de_l'application"><strong>Installation de l'application</strong></h3>

<p>Les applications sont installées grâce à l'<a href="https://developer.mozilla.org/fr/Apps/API_JavaScript_Apps">API JavaScript Apps</a>  :</p>

<ul>
 <li><span id="result_box" lang="fr"><span class="hps">Les applications hébergées</span><span> </span><span class="hps">sont installées</span> <span class="hps">en appelant</span><code> <span class="hps">navigator.mozApps.<a href="https://developer.mozilla.org/fr/docs/DOM/Apps.install">install</a></span></code> <span class="atn hps">(</span><code><span>manifestURL</span></code><span>)</span><span>,</span> <span class="hps"></span> <code><span class="hps">manifestURL</span></code> <span class="hps">est une URL</span> <span class="hps">qui</span> définit<span class="hps"> l'emplacement</span> <span class="hps">de l'application</span><span>.</span> <span class="hps">Pour plus de détails</span><span>,</span> <span class="hps">voir la page sur</span> <span class="hps">l'<a href="https://developer.mozilla.org/fr/docs/DOM/Apps.install">installation d'applications</a></span><span>.</span> </span></li>
 <li><span id="result_box" lang="fr"><span class="hps">Les applications empaquetées :</span> <span class="hps">elles</span><span class="hps"> sont</span> <span class="hps">installées</span> <span class="hps">en appelant<code> </code></span><code><span class="hps">navigator.mozApps.<a href="https://developer.mozilla.org/fr/docs/Web/API/Apps.installPackage">installPackage</a></span><span class="atn hps">(</span><span>PackageURL</span></code><span><code>)</code>.</span> <span class="hps">Pour</span> <span class="hps">les</span> <span class="hps">applications</span> empaquet<span class="hps">ées</span><span>,</span> le manifeste de <span class="hps">l'application principale</span> <span class="hps">est stocké dans</span> <span class="hps">le</span> <span class="hps">paquet lui-même</span><span>, de sorte qu'il</span> <span class="hps">est</span> <span class="hps">signé</span><span>.</span> <span class="hps">Il y a un deuxième</span> <span class="atn hps">« </span><span class="atn">mini-</span><span>manifeste</span><span> »</span><span>,</span><span class="hps"> utilisé pour démarrer</span> <span class="hps">le processus d'installation</span><span>.</span> <span class="hps">Voir l'<a href="https://developer.mozilla.org/fr/docs/Web/API/Apps.installPackage">installation</a></span><a href="https://developer.mozilla.org/fr/docs/Web/API/Apps.installPackage"> d'<span class="hps">applications</span> empaquetées</a><span class="hps"> et <a href="https://developer.mozilla.org/fr/Marketplace/Options/Packaged_apps">les applications</a></span><a href="https://developer.mozilla.org/fr/Marketplace/Options/Packaged_apps"> em<span class="hps">paquetées</span></a> <span class="hps">pour plus d'informations</span><span>.</span> </span></li>
</ul>

<p><span id="result_box" lang="fr"><span class="hps">Afin de garantir</span> qu'<span class="hps">une application</span> est bien installée comme une application web, il faut s'assurer que le site web ne trompe pas le mécanisme avec un manifeste d'application. Pour cela<span class="hps">, on vérifie que le type MIME du manifeste servi est </span><code>application/x-web-app-manifest+json</code><span>.</span> <span class="hps">Cette restriction</span> <span class="hps">est levée lorsque le manifeste de l'application a la même origine que la page demandant l'installation de l'application</span><span class="hps">.</span> </span></p>

<h3 id="Mise_à_jour"><span class="mw-headline" id="Updates">Mise à jour</span></h3>

<p><span id="result_box" lang="fr"><span class="hps">Le processus de</span> <span class="hps">mise à jour</span> <span class="hps">pour les applications</span> <span class="hps">est décrit</span> <span class="hps">à</span> <span class="hps">la page <a href="https://developer.mozilla.org/fr/Marketplace/Publishing/Updating_apps">mise à jour</a></span><a href="https://developer.mozilla.org/fr/Marketplace/Publishing/Updating_apps"> <span class="hps">des applications</span><span>.</span></a> </span></p>

<h2 id="Autorisations">Autorisations</h2>

<p><span id="result_box" lang="fr"><span class="hps">Les applications peuvent</span> avoir <span class="hps">des privilèges supplémentaires</span> <span class="hps">par rapport à </span><span class="hps">ceux</span> <span class="hps">accordés aux</span> <span class="hps">sites web</span> <span class="hps">normaux</span><span>.</span> <span class="hps">Par défaut</span>, <span class="hps">une application</span> <span class="hps">possède les</span> <span class="hps">mêmes autorisations qu'une page</span><span class="hps"> web</span> <span class="hps">normale</span><span>.</span> <span class="hps">Afin d'obtenir</span> <span class="hps">des autorisations supplémentaires</span><span>,</span> il faut tout d'abord lister les autorisations nécessaires dans le manifeste : </span></p>

<h3 id="Déclaration_de_manifeste">Déclaration de manifeste</h3>

<p><span id="result_box" lang="fr"><span class="hps">Pour chaque</span> <span class="hps">autorisation supplémentaire</span><span>,</span> <span class="hps">le</span> <span class="hps">manifeste doit</span> <span class="hps">lister</span> <span class="hps">cette autorisation</span> ainsi qu'<span class="hps">une description</span> <span class="hps">lisible</span> <span class="hps">de</span> <span class="hps">la raison pour laquelle</span> <span class="hps">l'application</span> souhaite<span class="hps"> accéder à</span> <span class="hps">cette autorisation.</span> <span class="hps">Par exemple, si</span> <span class="hps">une application</span> <span class="hps">souhaite</span> <span class="hps">utiliser l'API</span> <span class="hps">de</span> <a href="https://developer.mozilla.org/fr/docs/Web/API/NavigatorGeolocation.geolocation"><span class="hps">navigator.geolocation</span></a><span>, le manifeste devra contenir le fragment suivant </span><span>:</span> </span></p>

<pre class="brush: html">"permissions": {
  "geolocation":{
<code class="language-js"><span class="string token">    "description"</span><span class="punctuation token">:</span> <span class="string token">"Required for autocompletion in the share screen"</span><span class="punctuation token">,</span></code>
  }
},
</pre>

<p>Cela permettra à l'application de demander la permission pour utiliser la géolocalisation (de la même manière qu'une page web). Pour plus de détails sur le fichier de manifeste, voir <a href="https://developer.mozilla.org/fr/Apps/Manifeste">manifeste d'application</a>.</p>

<div class="note">
<p><strong>Note </strong>: À l'heure actuelle, les descriptions des autorisations ne sont pas affichées : voir le <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=823385" title="https://bugzilla.mozilla.org/show_bug.cgi?id=823385">bug 823385</a>.</p>
</div>

<h3 id="Accorder_les_permissions"><span id="result_box" lang="fr"><span class="alt-edited hps">Accorder les permissions</span></span></h3>

<p><span id="result_box" lang="fr"><span class="hps">Lorsque les autorisations</span> <span class="hps">sont demandées dans</span> <span class="hps">le manifeste</span><span>, il y a deux modes pour activer les permissions : la demande ou l'activation par défaut. L'activation par défaut est mise en place grâce au manifeste, sans autre interaction. Les permissions demandées sont affichées lors de la première utilisation et l'utilisateur peut choisir d'autoriser ou non l'API</span><span class="hps">.</span> <span class="hps">En général</span><span>,</span> <span class="hps">Firefox</span> <span class="hps">OS </span>ne demande les autorisations que si celles-ci ont un impact sur la vie privée et qu'il est pertinent que l'utilisateur sache pourquoi l'API est utilisée<span>.</span> <span class="hps">Par exemple</span><span>, l'application demandera une permission pour accéder aux</span> <span class="hps">contacts</span><span>,</span> <span class="hps">mais</span> <span class="hps">l'établissement d'</span><span class="hps">une connexion</span> <span class="hps">TCP</span> <span class="hps">brut</span>e <span class="hps">est implicite</span>ment autorisé <span class="hps">car ici, il n'est pas nécessaire que l'utilisateur fournisse son accord. Lorsque les applications sont revues pour être intégrées au Marketplace</span>, l'utilisation des permissions est examinée afin d'assurer la protection des utilisateurs.</span></p>

<h3 id="Révoquer_les_permissions"><span id="result_box" lang="fr"><span class="hps">Révoquer les permissions</span></span></h3>

<p><span id="result_box" lang="fr"><span class="hps">À tout moment, les utilisateurs peuvent changer d'avis sur les permissions qui auront été demandées. Pour révoquer une permission, il faut aller dans l'application Paramètres. En revanche, les permissions activées par défaut ne sont pas paramétrables</span><span>.</span></span></p>

<h2 id="Application_web_Sandbox">Application web Sandbox</h2>

<h3 id="Stockage_des_données_par_application"><span id="result_box" lang="fr"><span class="hps">Stockage des données par application</span> </span></h3>

<p>Chaque application s'exécute dans une <em>sandbox</em> de façon indépendante, ce qui signifie que toutes les données stockées par une application <span id="result_box" lang="fr"><span class="hps">sont séparées des données stockées par les autres applications. Parmi ces données, on retrouve </span></span>les cookies, les données locales et les autorisations liées au site.</p>

<p><img alt="A diagram showing three Firefox OS apps all open is separate sandboxes, so none of them can affect each other." src="https://mdn.mozillademos.org/files/7091/sandbox.png" style="display: block; height: 437px; margin: 0px auto; width: 1040px;"></p>

<div class="almost_half_cell" id="gt-res-content">
<div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">Cela signifie que si</span> <span class="hps">l'utilisateur possède deux</span> <span class="hps">applications installées</span><span>,</span> <span class="hps">App</span>li <span class="hps">A et</span> <span class="hps">Appli B</span><span>,</span> <span class="hps">ces applications</span> <span class="hps">ne partageront pas les cookies</span><span class="hps">,</span> les <span class="hps">différentes</span> <span class="hps">données locales</span> <span class="hps">et</span> <span class="hps">les autorisations</span><span>.</span></span> Ceci s'applique également si ces deux applications ouvrent un <a href="/fr/docs/Web/HTML/Element/iframe" title="Cet élément prend en charge les attributs universels."><code>&lt;iframe&gt;</code></a> qui pointe vers la même origine. Par exemple, si <span id="result_box" lang="fr"><span class="hps">Appli</span> <span class="hps">A et</span> <span class="hps">Appli</span> B ouvrent<span class="hps"> un</span> <span class="hps">&lt;iframe</span><span>&gt;</span> <span class="hps">pointant vers</span> <a href="http://www.mozilla.org"><span>http://www.mozilla.org</span></a><span>,</span> <span class="hps">elles iront toutes les deux sur ce site</span><span>,</span> <span class="hps">mais ce dernier sera récupéré et servi avec</span> <span class="alt-edited hps">des cookies distincts selon</span><span class="hps"> les</span> <span class="hps">deux</span> <span class="hps">applications</span><span>.</span></span></div>

<div dir="ltr" style="zoom: 1;"> </div>
</div>

<p><span id="result_box" lang="fr"><span class="hps">Ainsi, si l'utilisateur se connecte sur F</span><span class="hps">acebook</span> <span class="hps">avec l'Appli A, cela n'aura aucun impact sur l'utilisation de Facebook par l'Appli B. </span><span class="hps">Le cookie</span> <span class="hps">de connexion</span> entre Facebook et l'Appli A n'est disponible que pour l'Appli A. Si l'Appli<span class="hps"> B</span> <span class="hps">ouvre un</span> <span class="hps">&lt;iframe</span><span>&gt;</span> <span class="hps">pour Facebook</span><span>,</span> <span class="hps">le cookie</span> <span class="hps">ne sera pas disponible.</span> C'est pourquoi, <span class="hps">quand</span> <span class="hps">l'Appli</span> <span class="hps">B</span> <span class="hps">ouvre</span> <span class="hps">Facebook</span><span>, elle affichera la page de connexion plutôt que le compte de l'utilisateur.</span></span></p>

<h3 id="Une_application_ne_peut_en_ouvrir_une_autre"><span class="mw-headline" id="Apps_can.27t_open_each_other">Une application ne peut en ouvrir une autre</span></h3>

<p><span id="result_box" lang="fr"><span class="hps">Cela signifie</span> <span class="hps">que les applications</span> <span class="hps">ne peuvent pas</span> <span class="hps">ouvrir d'autres</span> <span class="hps">applications</span> <span class="hps">en utilisant</span> <span class="hps">les iframes</span><span>.</span> <span class="hps">Si</span> l'application <span class="hps">A crée</span> <span class="hps">une</span> <code><span class="hps">&lt;iframe</span><span>&gt;</span></code> <span class="hps">dont le</span> <code><span class="hps">src</span></code> <span class="hps">correspond à l'URL de l'application B, cela n'ouvrira pas l'application B </span><span class="hps">dans l'</span><code><span class="hps">&lt;iframe</span><span>&gt;</span></code><span>.</span> <span class="hps">Cela ouvrira uniquement le site web situé à cet emplacement. Elle n'utilisera aucun des cookies de l'application B et le comportement observé sera le même que si l'application n'était pas installée sur l'appareil de l'utilisateur</span><span>.</span></span></p>

<p>Cela s'applique également aux applications empaquetées (voir ci-après pour plus d'informations). Si l'application A tente d'ouvrir l'application empaquetée B en utilisant un <code>&lt;iframe&gt; </code>dirigeant vers l'URL <code>app://</code> de l'application B, celle-ci ne sera pas chargée. Cela provoquera une erreur 404 ou une autre erreur. Que l'application B soit installée ou non, cela échouera car l'application A ne peut pas détecter si l'application B est installée.</p>

<div class="almost_half_cell" id="gt-res-content">
<div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">La</span> <span class="hps">même chose se produit</span> <span class="hps">si la frame de plus haut niveau </span><span class="hps">de l'application</span> <span class="hps">A est</span> dirigée <span class="hps">vers une URL</span> de <span class="hps">l'application</span> <span class="hps">B.</span> Pour chaque frame, le système connaît l'application ouverte, ainsi, toute tentative d'ouverture de l'application B depuis une frame de l'application A échouera comme décrit précédemment et l'application A ne pourra accéder à aucune des ressources de B<span>.</span></span></div>

<div dir="ltr" style="zoom: 1;"> </div>
</div>

<h3 id="Les_raisons_de_ce_fonctionnement"><span class="mw-headline" id="Motivation">Les raisons de ce fonctionnement</span></h3>

<p><span id="result_box" lang="fr"><span class="hps">Cette approche possède des avantages et des inconvénients. Un des premiers inconvénients est le suivant : </span><span class="hps">si</span> <span class="hps">l'utilisateur interagit avec</span> <span class="hps">le même site</span> <span class="hps">web à travers</span> <span class="hps">plusieurs</span> <span class="hps">applications</span><span>,</span> <span class="hps">il</span> <span class="hps">devra</span> <span class="hps">se connecter à</span> <span class="hps">toutes les applications</span><span>.</span> <span class="hps">De même, si</span> <span class="hps">un site web</span> <span class="hps">veut stocker</span> <span class="hps">des données localement</span> <span class="hps">et que</span> <span class="hps">l'utilisateur interagit avec</span> <span class="hps">ce site</span> <span class="hps">web</span> <span class="hps">parmi les différentes applications</span><span>,</span> <span class="hps">les</span> <span class="hps">données</span> <span class="hps">vont ainsi </span><span class="hps">se</span> <span class="hps">dupliquer pour </span><span class="hps">chaque application</span><span>. Cela peut poser problème lorsque le volume de données devient conséquent</span><span>.</span></span></p>

<div class="almost_half_cell" id="gt-res-content">
<div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">Le principal avantage</span> <span class="hps">de cette approche est</span> <span class="hps">qu'il s'agit d'un</span> <span class="hps">modèle</span> <span class="hps">plus stable</span><span>.</span> <span class="hps">Il est impossible</span> <span class="hps">que plusieurs</span> <span class="hps">applications</span> <span class="hps">interagissent</span> <span class="hps">les unes avec les</span> <span class="hps">autres par un</span> <span class="hps">site tiers</span> <span class="hps">de manière inattendue. Par exemple, l'installation d'une application ne peut pas empêcher le fonctionnement d'une autre application. </span><span class="hps">Quand</span> <span class="hps">une application</span> <span class="hps">est désinstallée</span>, les données utilisées par une autre application ne peuvent pas être supprimées. De même, la désinstallation d'une application ne pourra poser aucun problème de dépendance pour une autre application.</span></div>

<div dir="ltr" style="zoom: 1;"> </div>

<p><span id="result_box" lang="fr"><span class="hps">Cela permet aussi de bénéficier d'une meilleure </span><span class="hps">sécurité</span><span>.</span> <span class="hps">Un utilisateur peut</span> ainsi <span class="hps">utiliser son application SuperRéseauSocial pour se connecter à Facebook sans se soucier du fait que l'application DessineMoiUnMouton puisse exploiter des données tierces grâce à d'éventuelles failles du site</span><span>.</span></span></p>
</div>

<p><span id="result_box" lang="fr"><span class="hps">Cela permet aussi de bénéficier de certains avantages en ce qui concerne la vie privée</span><span>.</span> <span class="hps">L'utilisateur peut</span> ainsi <span class="hps">installer</span> <span class="hps">l'application</span> <span class="hps">MonPartiPolitique <span id="result_box" lang="fr"><span class="hps">en toute sécurité</span> </span>sans se soucier du fait que </span>MonAppliProfessionnelle puisse détecter <span class="hps">les nouvelles données.</span></span></p>

<h3 id="Isolement_des_permissions"><span class="mw-headline" id="Sandboxed_Permissions">Isolement des permissions</span></h3>

<div class="almost_half_cell" id="gt-res-content">
<div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">De façon analogue aux données, les permissions sont isolées les unes des autres. Ainsi si l'application A </span><span class="hps">charge une page</span> <span class="hps">de</span> <a href="http://maps.google.com"><span class="hps">http://maps.google.com</span></a> <span class="hps">et demande à l'utilisateur la permission d'utiliser la </span><span class="hps">géolocalisation, que l'utilisateur autorise la page et choisit </span><span class="hps">« oui</span><span>,</span> se souvenir de cette décision »<span>,</span> <span class="hps">cela signifie seulement</span> <span class="hps">que</span> <a href="http://maps.google.com"><span class="hps">http</span><span>:</span> <span class="hps">//maps.google</span> <span class="hps">com</span></a> <span class="hps">aura accès à</span> <span class="hps">la géolocalisation</span> depuis l'application A. Si l'application <span class="hps">B</span> utilise la page <a href="http://maps.google.com"><span class="hps">http://maps.google.com</span></a><span>,</span> <span class="hps">cette page</span> <span class="hps">n'aura pas</span><span class="hps"> accès à</span> <span class="hps">la géolocalisation</span> sauf si<span class="hps"> l'utilisateur</span> <span class="hps">accorde</span> <span class="hps">à nouveau</span> la permission<span class="hps">.</span></span></div>

<div dir="ltr" style="zoom: 1;"> </div>
</div>

<div class="almost_half_cell" id="gt-res-content">
<div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">De façon semblable au navigateur, les permissions sont isolées selon l'origine</span><span>.</span> <span class="hps">Si</span> <span class="alt-edited hps">l'application A est autorisée à utiliser l'API Geolocation, cela ne signifie pas que toutes les origines présentes dans l'application A pourront utiliser l'API. Par exemple, si l'application A ouvre une </span><code><span class="hps">&lt;iframe</span><span>&gt;</span></code> <span class="hps">ver</span>s <a href="http://maps.google.com"><span class="hps">http://maps.google.com</span></a><span>,</span> <span class="hps">alors</span> <a href="http://docs.google.com"><span class="hps">http://docs.google.com</span></a> <span class="hps">devra demander la permission</span></span><span lang="fr"><span class="hps"> à l'utilisateur</span> <span class="hps">pour pouvoir utiliser l'API de géolocalisation</span><span>.</span></span></div>

<div dir="ltr" style="zoom: 1;"> </div>
</div>

<h3 id="Sandbox_pour_l'API_Browser">Sandbox pour l'API Browser</h3>

<p><span id="result_box" lang="fr"><span class="hps">Pour sécuriser les applications qui ouvrent un grand nombre d'URL, comme les navigateurs, nous avons ajouté un indicateur (<em>flag</em>) </span><code> <span class="hps">browserContent</span></code><span></span><span class="hps">L'indicateur</span> <code><span class="hps">browserContent</span></code> <span class="hps">permet à chaque</span> <span class="hps">application</span> <span class="hps">d'avoir</span> <span class="hps">non pas un,</span> <span class="hps">mais</span> <span class="hps">deux</span> <span class="hps">bacs à sable (<em>sandboxes</em>) </span><span>:</span> <span class="hps">un pour</span> <span class="hps">l'application</span> <span class="hps">elle-même</span> <span class="hps">et l'autre pour</span> <span class="hps">tout le</span> <span>contenu web</span><span> ouvert par l'application.</span></span></p>

<p><span id="result_box" lang="fr"><span class="hps">Par exemple, si l'application monNavigateur est chargée depuis </span><span class="hps">https://monnavigateur.com</span><span class="hps">, les scripts et ressources seront chargées dans ce bac à sable, ils <em>appartiennent</em> à ce domaine.</span></span></p>

<p><span id="result_box" lang="fr">Ensuite, <span class="hps">si une page</span> <span class="hps">de </span><span class="hps">l'application</span> <span class="hps">crée un</span> </span><code>&lt;iframe mozbrowser&gt;</code><span id="result_box" lang="fr"><span>,</span> <span class="alt-edited hps">une sandbox</span> <span class="hps">différente sera</span> <span class="hps">créée et utilisée</span> <span class="hps">pour cette</span> </span><code>&lt;iframe&gt;</code><span id="result_box" lang="fr"><span>. Cette sandbox sera différente de la première</span><span>.</span> <span class="hps">Ainsi, si cet </span></span><code>&lt;iframe&gt;</code><span id="result_box" lang="fr"> <span class="alt-edited hps">dirige vers</span> <span class="hps">https://monnavigateur.com</span><span>,</span> <span class="alt-edited hps">cela se traduira par</span> l'utilisation d'autres cookies pour cet </span><code>&lt;iframe mozbrowser&gt;</code>. <span id="result_box" lang="fr"><span class="hps">De même</span><span>,</span> <span class="hps">le contenu</span> <span class="hps">à l'intérieur de</span> <span class="hps">la</span> </span><code>&lt;iframe mozbrowser&gt;</code><span id="result_box" lang="fr"> <span class="hps">verra</span> <span class="hps">des données locales différentes de celles correspondant à l'application</span><span>.</span></span></p>

<p><span id="result_box" lang="fr"><span class="hps">Ceci s'appliquera également si</span> <span class="hps">l'application</span> </span>monNavigateur souhaite intégrer des fonctionnalités de Google Maps<span id="result_box" lang="fr"> pour proposer des outils de navigation basés sur la géo<span class="hps">localisation</span><span>.</span> <span class="hps">Ainsi, si l'application</span> <span class="hps">ouvre</span> <span class="hps">un</span> </span><code>&lt;iframe&gt;</code><span id="result_box" lang="fr"> <span class="hps">vers</span> <a href="http://maps.google.com"><span class="hps">http://maps.google.com</span></a><span>, il</span> <span class="hps">recevra</span> <span class="hps">un ensemble</span> <span class="hps">de cookies</span> <span class="hps">pour</span> <a href="http://maps.google.com"><span class="hps">http://maps.google.com</span></a><span class="hps">.</span> <span class="hps">Si</span> <span class="hps">l'utilisateur navigue</span> <span class="hps">alors</span> <span class="hps">à l'intérieur du</span> </span><code>&lt;iframe mozbrowser&gt;</code><span id="result_box" lang="fr"> <span class="hps">contenant</span> <a href="http://maps.google.com"><span class="hps">http://maps.google.com</span></a><span>,</span> <span class="hps">cela</span> <span class="hps">utilisera</span> <span class="hps">différents cookies</span> <span class="hps">et</span> d'autres autorisations au niveau le plus haut de l'application<span>.</span></span></p>

<p>Voici un autre scénario où cela peut être utile : l'application Yelp. Cette application permet d'ouvrir différents sites Internet de restaurants. En utilisant <code>&lt;iframe mozbrowser&gt;, </code><span id="result_box" lang="fr"><span class="hps">afin d'ouvrir le site</span> <span class="hps">du restaurant,</span> <span class="hps">l'application Yelp</span> <span class="hps">s'assure</span> <span class="hps">que le site web</span> <span class="hps">du restaurant</span> <span class="hps">ne contiendra pas d'</span></span><code>&lt;iframe&gt;</code><span id="result_box" lang="fr"> <span class="hps">pointant vers</span> <span class="atn hps">l'</span><span>application</span> <span class="hps">Yelp. En effet, si le site du restaurant pointe d'une certaine façon vers</span> <span class="hps">http://yelp.com</span><span>, il « verra » le site web Yelp plutôt que l'application. Ainsi, il est théoriquement impossible que le site du restaurant attaque les données de l'application Yelp.</span></span></p>

<h2 id="Résumé_sur_la_sécurité_des_applications">Résumé sur la sécurité des applications</h2>

<div class="almost_half_cell" id="gt-res-content">
<div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">Le tableau</span> <span class="hps">ci-dessous résume</span> <span class="hps">les</span> <span class="atn hps">différents types d'</span><span>applications</span> <span class="hps">de Firefox</span> <span class="hps">OS</span> <span class="hps">et</span> <span class="hps">décrit le format</span><span>, l'installation et</span> <span class="hps">les processus</span> <span class="hps">de mise à jour</span> <span class="hps">pour les applications</span> web <span class="hps">fonctionnant sur</span> <span class="hps">Firefox</span> <span class="hps">OS</span><span>.</span></span></div>

<div dir="ltr" style="zoom: 1;"> </div>
</div>

<table>
 <caption>Les types d'application web</caption>
 <thead>
  <tr>
   <th scope="col">Type</th>
   <th scope="col">Mise à disposition</th>
   <th scope="col" style="text-align: center;">Modèle d'autorisations</th>
   <th scope="col">Installation</th>
   <th scope="col">Mise à jour</th>
  </tr>
 </thead>
 <tbody>
  <tr>
   <td>Web</td>
   <td style="text-align: center;">Hébergée ou empaquetée</td>
   <td>Les permissions les moins sensibles qui ont le moins d'impact lorsqu'un contenu web non autorisé est exposé</td>
   <td>Peut être installée depuis n'importe où</td>
   <td>
    <div class="almost_half_cell" id="gt-res-content">
    <div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">Peut être</span> <span class="hps">mis à jour</span> <span class="hps">de façon transparente pour</span> <span class="hps">l'utilisateur</span> <span class="hps">ou explicitement</span> grâce au Ma<span class="alt-edited hps">rketplace</span><span>,</span> en fonction de l'emplacement où <span class="hps">l'application a été</span> <span class="alt-edited hps">installée</span> <span class="hps">et du mécanisme</span> <span class="hps">de livraison</span></span></div>
    </div>
   </td>
  </tr>
  <tr>
   <td>Privilégié</td>
   <td>Empaquetée ou signée</td>
   <td>Les API privilégiées ont besoin d'une validation et d'une authentification de l'application</td>
   <td>Doit être installée depuis le Marketplace</td>
   <td><span id="result_box" lang="fr"><span class="hps">Mise à jour</span> <span class="hps">via</span> <span class="alt-edited hps">un Marketplace</span> <span class="hps">de confiance</span><span class="alt-edited">, l'utilisateur est</span> <span class="hps">invité à</span> <span class="hps">approuver</span> <span class="hps">le téléchargement</span> <span class="hps">et l'installation</span> <span class="hps">des mises à jour</span></span></td>
  </tr>
  <tr>
   <td>Certifié</td>
   <td>Empaquetée</td>
   <td>
    <div class="almost_half_cell" id="gt-res-content">
    <div dir="ltr" style="zoom: 1;"><span id="result_box" lang="fr"><span class="hps">Les API</span> <span class="hps">puissantes</span> <span class="hps">et</span> <span class="hps">dangereuses</span> <span class="hps">ne sont pas disponibles</span> <span class="hps">pour</span> <span class="hps">les applications tierces</span></span></div>
    </div>
   </td>
   <td>L'application est préinstallée sur l'appareil</td>
   <td><span id="result_box" lang="fr"><span class="hps">Mise à jour</span> <span class="hps">uniquement dans le cadre</span> <span class="hps">des mises à jour du </span><span class="hps">système</span></span></td>
  </tr>
 </tbody>
</table>

<div class="note">
<p><strong>Note </strong>: <span id="result_box" lang="fr"><span class="hps">Pour la version</span> <span class="hps">1.0</span> <span class="hps">de</span> <span class="hps">Firefox</span> <span class="hps">OS</span><span>,</span> <span class="hps">bien que</span> <span class="hps">les applications web</span> <span class="hps">puissent être installées</span> <span class="hps">depuis n'importe quel site ou Marketplace, certaines applications priv</span><span class="hps">ilégiées</span> <span class="hps">ne peuvent être</span> <span class="hps">installées que depuis le</span> <span class="alt-edited hps">Marketplace</span> <span class="hps">de Mozilla</span><span>. La gestion des autres Marketplace de confiance n'est pas encore finalisée</span><span>.</span></span></p>
</div>

<p> </p>