L’en-tête de réponse HTTP Content-Security-Policy permet au site de contrôler quelles ressources l’agent utilisateur charge pour une page donnée. Sauf dans des cas particuliers, l’ensemble de politiques consiste principalement à spécifier les points d’origine et de script du serveur. Cela aidera à stopper les attaques cross-site scripting
Documentation:La connexion hyperlientérée est visible.
Cet article décrit la politique de sécurité des contenus du W3C, ou CSP en abrégé. Comme son nom l’indique, cette spécification est liée à la sécurité du contenu et sert principalement à définir quelles ressources une page peut charger et à réduire la présence de XSS.
Les premiers Chrome prenaient en charge le CSP via l’en-tête de réponse X-WebKit-CSP, tandis que Firefox et IE prenaient en charge X-Content-Security-Policy, et Chrome25 et Firefox23 ont commencé à prendre en charge la politique standard Content-Security-Policy.
Des informations sensibles concernant les applications web, telles que les noms d’utilisateur, mots de passe, noms de machines et/ou emplacements de fichiers sensibles, peuvent être collectées Les utilisateurs débutants peuvent être persuadés de fournir des informations sensibles telles que des noms d’utilisateur, mots de passe, numéros de carte bancaire, numéros de sécurité sociale, etc
D’abord, créons un nouveau projet ASP.NET MVC, créons un nouveau script js, et chargeons dynamiquement le code js des statistiques Baidu, comme suit :
Comme montré dans la figure ci-dessus, on peut voir le code de script JS qui a été introduit avec succès dans un tiers (Baidu), s’il y a du code malveillant dans le JS tiers, comme le vol de cookies, la modification de contenu, le saut de liens, etc.
Comment puis-je empêcher l’introduction de scripts JS tiers peu sécurisés ?
Solution de contournement
Tête de réponseAjouter « Politique-Sécurité-Contenu »par exemple:
Directive | Exemple de valeur d’instruction | illustrer | par défaut-src | « soi » cnd.a.com | Définissez la politique de chargement par défaut pour tous les types de ressources (JS, IMAGE, CSS, WEB FONT, REQUÊTES AJAX, IFRAMES, MULTIMÉDIA, ETC.), et utilisez la politique par défaut pour certains types de ressources s’il n’y a pas de politique distincte définie. | script-src | « soi » js.a.com | Définissez une politique de chargement pour JavaScript. | style-src | « soi » css.a.com | Définissez une politique de chargement pour un style. | IMG-SRC | « soi » img.a.com | Définissez une politique de chargement pour les images. | connect-src | « Moi » | Chargement des politiques pour les requêtes depuis Ajax, WebSockets, etc. Si ce n’est pas autorisé, le navigateur simule une réponse avec un statut de 400. | font-src | font.a.com | Politique de chargement pour WebFont. | object-src | « Moi » | <object><embed> <applet> Politiques de chargement pour des plugins tels que Flash introduites pour des balises telles que , ou . | Media-SRC | media.a.com | <audio> <video> Stratégies de chargement pour le multimédia HTML introduites pour des balises telles que ou . | Frame-SRC | « Moi » | Politique de chargement des trames. | Bac à sable | Formes permises | Activez le bac à sable (similaire à la propriété bac à sable d’un iframe) pour la ressource demandée. | Report-uri | /report-uri | Indiquez au navigateur à quelle adresse soumettre les informations de journal si la ressource demandée n’est pas autorisée par la politique. Spécial : Si vous souhaitez que le navigateur ne rapporte que les journaux sans bloquer quoi que ce soit, vous pouvez utiliser l’en-tête Content-Security-Policy-Report-Only à la place. |
Modifions le fichier web.config du projet pour ajouter un en-tête de réponse personnalisé comme suit :
Relancez le projet comme montré ci-dessous :
Le navigateur a réussi à bloquer le chargement des scripts js tiers :
Refusé de charger le script 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319' car il viole la directive suivante de la politique de sécurité du contenu : « script-src 'self' http://localhost:56888/ ». Notez que « script-src-elem » n’a pas été explicitement défini, donc « script-src » est utilisé comme solution de secours. (Fin)
|