L'auteur du document, dont nous publions la traduction aujourd'hui, affirme qu'il existe de nombreuses raisons d'Ă©tudier la sĂ©curitĂ© Web. Par exemple, les utilisateurs de sites Web qui sont prĂ©occupĂ©s par le vol de leurs donnĂ©es personnelles sont intĂ©ressĂ©s par les problĂšmes de sĂ©curitĂ©. La sĂ©curitĂ© concerne les dĂ©veloppeurs web qui cherchent Ă augmenter le niveau de protection de leurs projets. La mĂȘme chose peut ĂȘtre dite des programmeurs dĂ©butants qui recherchent du travail et se prĂ©parent pour des entretiens. Le but de cet article est de comprendre certaines technologies de sĂ©curitĂ© Web importantes dans un langage comprĂ©hensible. Avant de commencer Ă parler de ces technologies, qui sont gĂ©nĂ©ralement appelĂ©es abrĂ©viations comme CORS, CSP et HSTS, nous allons examiner quelques concepts de sĂ©curitĂ© de base.
Deux concepts de sécurité Web de base
La protection Ă 100% est un mythe
Dans le monde de la sécurité, il n'existe pas de «protection à 100% contre le piratage». Si quelqu'un vous parle de ce niveau de protection, sachez qu'il a tort.
âUn niveau de protection ne suffit pas
Supposons que quelqu'un pense qu'en mettant en Ćuvre le CSP, il a entiĂšrement protĂ©gĂ© son projet contre les attaques XSS. Peut-ĂȘtre que quelqu'un perçoit que la protection absolue n'existe pas comme une donnĂ©e, mais des pensĂ©es comme celle dĂ©crite ci-dessus peuvent rendre visite Ă n'importe qui. Si nous parlons de programmeurs qui ont dĂ©cidĂ© de comprendre les problĂšmes de sĂ©curitĂ©, la raison de ces rĂ©flexions est peut-ĂȘtre le fait que, lors de l'Ă©criture de code de programme, ils fonctionnent principalement avec des concepts tels que "noir" et "blanc", 1 et 0, «vrai» et «faux». Mais la sĂ©curitĂ© n'est pas si simple.
Technologies de sécurité Web
Commençons la discussion sur la sĂ©curitĂ© Web avec la technologie, Ă laquelle les dĂ©veloppeurs prĂȘtent gĂ©nĂ©ralement attention trĂšs tĂŽt, disons, au tout dĂ©but de leur parcours professionnel. Soit dit en passant, si vous souhaitez contourner cette mĂ©thode de protection, vous pouvez trouver une tonne d'informations sur la façon de le faire sur StackOverflow. Il s'agit de CORS.
âCORS
Avez-vous déjà vu une telle erreur:
No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access.
Face Ă cela, vous pensez que vous n'ĂȘtes certainement pas le premier avec qui cela s'est produit. Googler, vous dĂ©couvrez que pour rĂ©soudre ce problĂšme, il suffit d'installer une sorte d'extension. Eh bien, n'est-ce pas merveilleux? Cependant, la technologie CORS (Cross-Origin Resource Sharing, partage de ressources entre diffĂ©rentes sources) n'existe pas pour interfĂ©rer avec les dĂ©veloppeurs, mais pour protĂ©ger leurs projets.
Afin de comprendre comment CORS protĂšge les projets Web, nous parlerons d'abord des cookies, en particulier des cookies utilisĂ©s pour authentifier les utilisateurs. Ces cookies sont utilisĂ©s lorsque vous travaillez avec une certaine ressource Web afin d'informer le serveur que l'utilisateur est connectĂ©. Ils sont automatiquement envoyĂ©s avec des requĂȘtes en cours d'exĂ©cution sur le serveur correspondant.
Supposons que vous soyez connecté à votre compte Facebook et que Facebook utilise des cookies d'authentification. En travaillant sur Internet, vous cliquez sur le lien
bit.ly/r43nugi
, vous ĂȘtes redirigĂ© vers un site Web malveillant, disons quelque chose comme
superevilwebsite.rocks
. Le script téléchargé avec la page de ce site effectue une demande client sur
facebook.com
aide de votre cookie d'authentification.
Dans un monde sans CORS, un script de
superevilwebsite.rocks
pourrait secrĂštement apporter des modifications Ă votre profil FB, il pourrait voler des informations, avec toutes les consĂ©quences qui en dĂ©coulent. Dans un tel monde, une «épidĂ©mie superevilwebsite.rocks» aurait pu facilement apparaĂźtre, lorsqu'un script capturant la gestion du compte de l'utilisateur publie un lien sur sa page, en cliquant sur lequel les amis de cet utilisateur «sont eux-mĂȘmes infectĂ©s», et Ă travers les liens publiĂ©s sur leurs pages, une Ă©pidĂ©mie couvre finalement tout Facebook.
Cependant, dans un monde oĂč CORS existe, Facebook n'autoriserait que les demandes de modification des donnĂ©es de compte Ă partir de
facebook.com
. En d'autres termes, l'administration du site limiterait le partage des ressources entre différentes sources.
Ici, vous pouvez avoir la question suivante: "Mais superevilwebsite.rocks peut simplement changer l'en-tĂȘte source dans ses demandes et ils sembleront provenir de facebook.com?"
Un site frauduleux peut essayer de le faire, mais il n'y parviendra pas, car le navigateur ignorera un tel en-tĂȘte et utilisera des donnĂ©es rĂ©elles.
"Et si superevilwebsite.rocks fait une requĂȘte similaire du serveur?", Demandez-vous.
Dans une situation similaire, CORS peut ĂȘtre contournĂ©, mais cela ne servira Ă rien, car, en exĂ©cutant une demande du serveur, il ne sera pas possible de transmettre un cookie d'authentification Ă Facebook. Par consĂ©quent, le script, pour mener Ă bien une telle demande, doit ĂȘtre exĂ©cutĂ© cĂŽtĂ© client et avoir accĂšs aux cookies stockĂ©s sur le client.
âCSP
Afin de comprendre ce qu'est CSP (Content Security Policy, Content Protection Policy), vous devez d'abord parler de l'une des vulnérabilités Web les plus courantes. Il s'agit de XSS (cross-site scripting, cross-site scripting).
Lors de l'exécution d'une attaque XSS, l'attaquant injecte du code JavaScript spécial dans la partie client d'un certain site. Vous pourriez penser: «Eh bien, que fera ce script? Changer les couleurs des éléments de page? "
Supposons que quelqu'un ait réussi à intégrer son script JS dans les pages du site que vous visitez. Que pourrait faire un script similaire? En fait, beaucoup de choses:
- Il peut faire des requĂȘtes HTTP Ă d'autres sites, en faisant semblant que vous les faites.
- Il peut vous rediriger vers un site qui ressemble exactement Ă celui auquel vous ĂȘtes connectĂ©, mais qui est conçu, par exemple, pour voler des informations d'identification.
- Il est capable d'ajouter des balises
<script>
aux pages qui contiennent du code JavaScript ou sont conçues pour charger une sorte de fichiers JS. - Il peut ajouter un élément
<iframe>
à la page, qui, par exemple, ressemblera exactement aux champs pour entrer le nom et le mot de passe pour entrer dans le site. Dans ce cas, ces champs de saisie de ces données seront masqués.
En fait, les possibilités qui s'ouvrent à un attaquant pour réussir à exécuter une attaque XSS sont infinies.
La stratĂ©gie de protection du contenu tente d'empĂȘcher cela en appliquant les restrictions suivantes:
- Limitations sur ce qui peut ĂȘtre ouvert dans un
<iframe>
. - Limitations sur lesquelles les feuilles de style peuvent ĂȘtre chargĂ©es.
- Limitations des requĂȘtes pouvant ĂȘtre effectuĂ©es.
Comment fonctionne le CSP?
Lorsque vous cliquez sur le lien ou entrez l'URL du site Web dans la barre d'adresse du navigateur, le navigateur effectue une demande GET. La demande est envoyĂ©e au serveur, qui transmet du code HTML au navigateur avec les en-tĂȘtes HTTP. Si vous souhaitez consulter ces rubriques, ouvrez l'onglet RĂ©seau dans les outils de dĂ©veloppement du navigateur et visitez plusieurs sites. L'en-tĂȘte de rĂ©ponse peut ressembler Ă ceci:
content-security-policy: default-src * data: blob:;script-src *.facebook.com *.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* 'unsafe-inline' 'unsafe-eval' *.atlassolutions.com blob: data: 'self';style-src data: blob: 'unsafe-inline' *;connect-src *.facebook.com facebook.com *.fbcdn.net *.facebook.net *.spotilocal.com:* wss://*.facebook.com:* https://fb.scanandcleanlocal.com:* *.atlassolutions.com attachment.fbsbx.com ws://localhost:* blob: *.cdninstagram.com 'self' chrome-extension://boadgeojelhgndaghljhdicfkmllpafd chrome-extension://dliochdbjfkdbacpmhlcpmleaejidimm;
Ceci est la politique de sécurité du contenu
facebook.com
. Convertissez-le en un aspect plus lisible:
content-security-policy: default-src * data: blob:; script-src *.facebook.com *.fbcdn.net *.facebook.net *.google-analytics.com *.virtualearth.net *.google.com 127.0.0.1:* *.spotilocal.com:* 'unsafe-inline' 'unsafe-eval' *.atlassolutions.com blob: data: 'self'; style-src data: blob: 'unsafe-inline' *; connect-src *.facebook.com facebook.com *.fbcdn.net *.facebook.net *.spotilocal.com:* wss://*.facebook.com:* https://fb.scanandcleanlocal.com:* *.atlassolutions.com attachment.fbsbx.com ws://localhost:* blob: *.cdninstagram.com 'self' chrome-extension://boadgeojelhgndaghljhdicfkmllpafd chrome-extension://dliochdbjfkdbacpmhlcpmleaejidimm;
Considérez les directives CSP présentées ici:
default-src
- interdit tout ce qui n'est pas défini explicitement.script-src
- introduit des restrictions sur les scripts téléchargeables.style-src
- impose des restrictions sur les feuilles de style chargées.connect-src
- introduit des restrictions sur les URL Ă partir desquelles les ressources peuvent ĂȘtre chargĂ©es Ă l'aide d'interfaces de script, telles que fetch
, XHR
, ajax
, etc.
Notez qu'en fait, il existe de nombreuses directives de ce type. Le navigateur lit l'en-tĂȘte CSP et applique les rĂšgles appropriĂ©es dans le fichier HTML chargĂ©. Des directives correctement configurĂ©es autorisent uniquement les actions nĂ©cessaires au bon fonctionnement de la page.
Si la page n'a pas d'en-tĂȘte CSP, aucune interdiction ne s'applique. Les caractĂšres * dans l'en-tĂȘte CSP sont des caractĂšres gĂ©nĂ©riques. Un tel signe peut ĂȘtre remplacĂ© par n'importe quoi, et ce qui se passera sera autorisĂ©.
âHTTPS
Vous avez sĂ»rement entendu parler de HTTPS (HTTP Secure). Peut-ĂȘtre avez-vous rencontrĂ© quelque chose comme ceci: "Pourquoi devrais-je m'inquiĂ©ter de HTTPS si je joue Ă un jeu sur le site?" Ou peut-ĂȘtre avez-vous eu l'idĂ©e suivante: «Si vous n'avez pas de HTTPS, alors c'est tout simplement fou. Dans la cour 2018 annĂ©e! Ne croyez pas que quiconque dit que HTTPS peut ĂȘtre dispensĂ©. »
Vous avez peut-ĂȘtre entendu dire que Chrome marque dĂ©sormais le site comme dangereux s'il n'utilise pas HTTPS.
La principale différence entre HTTPS et HTTP est que, lors de la transmission de données via HTTPS, elles sont cryptées, mais lors de la transmission via HTTP, elles ne le sont pas.
Pourquoi vaut-il la peine de prĂȘter attention lors du transfert de donnĂ©es prĂ©cieuses? Le fait est que lors de l'organisation de l'Ă©change de donnĂ©es via un canal de communication non sĂ©curisĂ©, il existe la possibilitĂ© d'une attaque MITM (Man In The Middle, une attaque intermĂ©diaire ou un homme au milieu).
Si vous, assis dans un cafĂ©, accĂ©dez Ă Internet via un point d'accĂšs Wi-Fi ouvert, quelqu'un, tout simplement, peut prĂ©tendre ĂȘtre un routeur par lequel passent toutes vos demandes et rĂ©ponses. Si vos donnĂ©es ne sont pas cryptĂ©es, l'intermĂ©diaire peut en faire ce qu'il veut. Dites qu'il peut modifier le code HTML, CSS ou JavaScript avant qu'il n'arrive du serveur dans votre navigateur. Compte tenu de ce que nous savons dĂ©jĂ sur les attaques XSS, vous pouvez imaginer quelles pourraient ĂȘtre les consĂ©quences.
"Comment est-ce possible: mon ordinateur et mon serveur savent chiffrer et dĂ©chiffrer les donnĂ©es que nous Ă©changeons, mais pas lâintermĂ©diaire malveillant?", Demandez-vous. Ceci est possible grĂące Ă l'utilisation du protocole SSL (Secure Sockets Layer) et du protocole TLS (Transport Layer Security) plus rĂ©cent. TLS a remplacĂ© SSL en 1999 en tant que technologie de cryptage utilisĂ©e dans HTTPS. Une discussion sur les fonctionnalitĂ©s TLS dĂ©passe le cadre de cet article.
âHSTS
La technologie HSTS (HTTP Strict-Transport-Security, le mĂ©canisme d'activation forcĂ©e d'une connexion sĂ©curisĂ©e via le protocole HTTPS) est assez simple. Par exemple, considĂ©rons Ă nouveau l'en-tĂȘte Facebook correspondant:
strict-transport-security: max-age=15552000; preload
Analysons-le:
max-age
définit la durée pendant laquelle le navigateur doit obliger l'utilisateur à travailler avec le site Web via HTTPS.preload
- pour nos besoins, ce n'est pas important.
Cet en-tĂȘte ne s'applique que si vous accĂ©dez au site via HTTPS. Si vous travaillez avec le site via HTTP, cet en-tĂȘte est ignorĂ©. La raison en est assez simple: la communication HTTP est si faible qu'un tel en-tĂȘte n'est pas fiable.
Reprenons l'exemple de Facebook pour démontrer l'utilité pratique du mécanisme HSTS. Supposons que vous vous connectiez à facebook.com pour la premiÚre fois et que vous savez que HTTPS est plus sûr que HTTP, vous utilisez donc ce lien:
https://facebook.com
. Lorsque votre navigateur reçoit le code HTML, il reçoit Ă©galement un en-tĂȘte qui indique au navigateur qu'il doit vous forcer Ă passer en HTTPS lors de futures demandes. AprĂšs un mois, quelqu'un vous envoie un lien HTTP vers Facebook,
http://facebook.com
, et vous cliquez dessus. Comme le mois est inférieur à la période de 15552000 secondes spécifiée par la directive
max-age
, le navigateur enverra une demande via HTTPS, empĂȘchant une Ă©ventuelle attaque MITM.
Résumé
Aujourd'hui, nous avons discuté de certaines technologies universellement utilisées pour assurer la sécurité des projets Web. Nous pensons que les questions de sécurité sont trÚs importantes, car elles concernent absolument tous ceux qui sont connectés à Internet. Le sujet de la sécurité Web est énorme, vous ne pouvez donc pas dire qu'aprÚs avoir lu plusieurs articles, quelqu'un deviendra un expert dans ce domaine ou au moins en apprendra suffisamment pour protéger efficacement votre projet Web ou vos données personnelles. Mais, comme dans tout autre domaine, les connaissances dans le domaine de la sécurité, s'il y a un désir de les recevoir, s'accumulent et leur quantité se transforme progressivement en qualité. Nous espérons que ce matériel a contribué à votre connaissance de la sécurité Web.
Chers lecteurs! Avez-vous rencontré des problÚmes de sécurité incohérents de la part des développeurs Web?
