Protection XSS
Filtrage d'entrée et de sortie
- xss.js - échappement HTML
encodeURI
ouencodeURIComponent
- échappement de l'adresse URL
Paramétrage des cookies HttpOnly
Le paramètre de cookie HttpOnly interdit la lecture de Cookie via JS.
Politique de sécurité du contenu Content-Security-Policy
CSP (Content-Security-Policy) est essentiellement un système de liste blanche que les développeurs peuvent personnaliser, qui peut indiquer au navigateur quelles ressources externes peuvent être chargées et exécutées.
Il existe deux façons d'activer CSP :
- Définir les en-têtes de réponse HTTP
Content-Security-Policy
- Définir le
<meta>
libellé de la page
Protection CSRF
**Suggestion : **Le client envoie une demande avec un jeton et le serveur vérifie la validité du jeton (comme les identifiants de connexion de l'utilisateur)
Autres façons de compléter:
- Le serveur vérifie si le référent d'en-tête de requête est une source sécurisée. Inconvénients : Certains plugins peuvent être falsifiés
- N'activez pas CORS et interdisez les requêtes interdomaines. Inconvénients : peut
<img>
<script>
être résolu par un proxy inverse, etc. - Les opérations sensibles utilisent des captchas. Inconvénients : expérience utilisateur peu conviviale
détournement de clic
Le détournement de clics incite principalement les utilisateurs à accéder à leurs propres pages et à interagir avec elles via des iframes ou le blocage d'images (comme la publication d'articles avec des adresses d'images malveillantes).
solution:
- Définissez l'en-tête de réponse X-Frame-Options pour empêcher d'autres sites d'intégrer des pages Web via iframe.
- Faites un bon travail de protection XSS et CSRF pour empêcher les attaquants d'injecter du code malveillant dans le site Web
attaque de l'homme du milieu
Les attaques de l'homme du milieu se réfèrent principalement aux attaquants qui interceptent les appels aux deux extrémités de la communication et insèrent un nouveau contenu.
Solution : utilisez le protocole de communication HTTPS.
fenêtre.ouverte
API DOM
Par défaut, la fenêtre ouverte par window.open() et la fenêtre appelant la méthode peuvent accéder au contexte de l'autre via l'API DOM (si la politique de même origine est satisfaite, elles peuvent également accéder aux propriétés et méthodes de l'autre) :
// http://a.example.com
const newWindow = window.open('http://b.example.com')
console.log(newWindow.opener === window) // true
// http://b.example.com
console.log(window.opener)
Il est recommandé de préciser lors de l'ouverture d'une page externe non fiable noopener
:
window.open('http://b.example.com', '_blank', 'noopener=yes')
Par défaut, la page demandée en ouvrant la fenêtre portera Referer
l'en-tête de la requête, tel que Referer: http://a.example.com
.
noreferrer
Cet en-tête peut être spécifié pour être omis, et il définira égalementnoopener
:
window.open('http://b.example.com', '_blank', 'noreferrer=yes')
En-tête de réponse Cross Origin Opener Policy
COOP (Cross-Origin-Opener-Policy) , politique d'ouverture cross-origin.
Par défaut, open est appelé dans la page window.open(<页面地址>)
, et COOP est utilisé pour limiter window.open()
l'accès à la fenêtre ouverte par la méthode opener
.
COOP a trois valeurs :
unsafe-none
same-origin-allow-popups
same-origin
**Exemple :** Supposons qu'il y ait trois pages, appelez la page A window.open()
pour ouvrir respectivement B et C (sans préciser noopener
et noreferrer
), les adresses des trois pages sont :
- Page A :
http://127.0.0.1:3000
(Ouvrez le côté fenêtre) - Page B :
http://127.0.0.1:5000
(le côté où la fenêtre est ouverte, source différente de A) - Page C :
http://127.0.0.1:3000
(fenêtre ouverte, même origine que A)
Quelle que soit la valeur COOP de la page A, A peut obtenir et accéder aux références de contexte ( window
objets) de B et C, et window.opener
les valeurs auxquelles accèdent les pages B et C sont les suivantes :
UNunsafe-none |
UNsame-origin-allow-popups |
UNsame-origin |
|
---|---|---|---|
Bunsafe-none |
window Un objet fenêtre |
window Un objet fenêtre |
null |
Bsame-origin-allow-popups |
null |
null |
null |
Bsame-origin |
null |
null |
null |
Cunsafe-none |
window Un objet fenêtre |
window Un objet fenêtre |
null |
Csame-origin-allow-popups |
null |
window Un objet fenêtre |
null |
Csame-origin |
null |
null |
window Un objet fenêtre |
Les règles se résument ainsi :
unsafe-none
A n'autorise queunsafe-none
les fenêtres avec le même paramètre à accéder à lui-même, qu'il soit ou non de la même originesame-origin-allow-popups
A n'autorise l'accès à lui-mêmeunsafe-none
qu'aux fenêtres de même et même originesame-origin-allow-popups
same-origin
A n'autorisesame-origin
l'accès à lui-même qu'aux fenêtres de même et même origine
COOP empêche uniquement l'acquisition inversée des fenêtres ouvertes opener
, ce qui équivaut à protéger les sites non fiables du serveur. Par rapport au fait de window.open()
s'assurer que noopener
ou est spécifié lors de l'appel noreferrer
, COOP est plus pratique et plus sûr.
Cependant , COOP ne fournit que plusieurs scénarios de configuration basés sur trois valeurs et la même politique d'origine. Si vous souhaitez limiter le contexte d'accès mutuel de la fenêtre ouverte dans d'autres scénarios, vous devez toujours le spécifier dans la window.open()
méthode noopener
.
Enfin, il est recommandé de configurer l'en-tête de réponse Cross-Origin-Opener-Policy
en tant que same-origin
.