De HTTP-responsheader Content-Security-Policy stelt de site in staat te bepalen welke bronnen de user agent voor een bepaalde pagina laadt. Behalve in speciale gevallen bestaat de beleidsset voornamelijk uit het specificeren van de bron- en scripteindpunten van de server. Dit helpt om cross-site scripting-aanvallen te voorkomen
Documentatie:De hyperlink-login is zichtbaar.
Dit artikel beschrijft het Content Security Policy van het W3C, of kortweg CSP. Zoals de naam al aangeeft, heeft deze specificatie betrekking op contentbeveiliging en wordt ze vooral gebruikt om te bepalen welke bronnen een pagina kan laden en zo het voorkomen van XSS te verminderen.
Vroege Chrome ondersteunde CSP via de X-WebKit-CSP response header, terwijl Firefox en IE X-Content-Security-Policy ondersteunden, en Chrome25 en Firefox23 begonnen het standaard Content-Security-Policy te ondersteunen.
Gevoelige informatie over webapplicaties, zoals gebruikersnamen, wachtwoorden, machinenamen en/of gevoelige bestandslocaties, kan worden verzameld Beginnende gebruikers kunnen worden overgehaald om gevoelige informatie te verstrekken zoals gebruikersnamen, wachtwoorden, creditcardnummers, sofinummers, enzovoort
Laten we eerst een nieuw project aanmaken ASP.NET MVC, een nieuw js-script aanmaken en de js-code van Baidu-statistieken dynamisch laden, als volgt:
Zoals te zien is in de bovenstaande figuur, kunnen we de JS-scriptcode zien die succesvol is geïntroduceerd in een derde partij (Baidu), als er kwaadaardige code in de JS van derden zit, zoals het stelen van cookies, het wijzigen van inhoud, het springen van links, enzovoort.
Hoe kan ik de introductie van onveilige JS-scripts van derden voorkomen?
Workaround
ResponskopVoeg "Content-Security-Policy" toe.bijvoorbeeld:
Richtlijn | Voorbeeld van instructiewaarde | illustreren | default-src | 'zelf' cnd.a.com | Definieer het standaard laadbeleid voor alle soorten bronnen (JS, AFBEELDING, CSS, WEBLETTERTYPE, AJAX-verzoeken, iframes, multimedia, enz.), en gebruik het standaardbeleid voor bepaalde soorten resources als er geen apart gedefinieerd beleid is. | script-src | 'zelf' js.a.com | Definieer een laadbeleid voor JavaScript. | Style-SRC | 'zelf' css.a.com | Definieer een laadbeleid voor een stijl. | IMG-SRC | 'zelf' img.a.com | Definieer een laadbeleid voor afbeeldingen. | connect-src | 'zelf' | Laadbeleid voor verzoeken van Ajax, WebSockets, enzovoort. Als het niet is toegestaan, simuleert de browser een antwoord met een status van 400. | font-src | font.a.com | Laadbeleid voor WebFont. | object-src | 'zelf' | <object><embed> <applet> Laadbeleid voor plugins zoals Flash werd geïntroduceerd voor tags zoals , of . | Media-SRC | media.a.com | <audio> <video> Laadstrategieën voor HTML-multimedia geïntroduceerd voor tags zoals of . | frame-src | 'zelf' | Laadbeleid voor frames. | Sandbox | toelaat-vormen | Schakel sandbox in (vergelijkbaar met de sandbox-eigenschap van een iframe) voor de gevraagde resource. | Report-uri | /report-uri | Vertel de browser naar welk adres loggegevens moeten worden verzonden als de gevraagde bron niet is toegestaan door het beleid. Special: Als je wilt dat de browser alleen logs rapporteert en niets blokkeert, kun je in plaats daarvan de header Content-Security-Policy-Report-Only gebruiken. |
Laten we het web.config-bestand van het project aanpassen om een aangepaste response-header toe te voegen als volgt:
Herhaal het project zoals hieronder weergegeven:
De browser blokkeerde succesvol het laden van JS-scripts van derden:
Weigerde het script 'https://hm.baidu.com/hm.js?6dbaac17dfeb2840b5b09d2dff6d2319' te laden omdat het de volgende Content Security Policy richtlijn schendt: "script-src 'self' http://localhost:56888/ ". Let op dat 'script-src-elem' niet expliciet is ingesteld, dus 'script-src' wordt als vangnet gebruikt. (Einde)
|