From 074785cea106179cb3305637055ab0a009ca74f2 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:42:52 -0500 Subject: initial commit --- .../web/security/subresource_integrity/index.html | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 files/nl/web/security/subresource_integrity/index.html (limited to 'files/nl/web/security/subresource_integrity') diff --git a/files/nl/web/security/subresource_integrity/index.html b/files/nl/web/security/subresource_integrity/index.html new file mode 100644 index 0000000000..ab70b9782f --- /dev/null +++ b/files/nl/web/security/subresource_integrity/index.html @@ -0,0 +1,161 @@ +--- +title: Subresource Integrity +slug: Web/Security/Subresource_Integrity +tags: + - Beveiliging + - HTML + - HTTP + - Intro + - netwerken +translation_of: Web/Security/Subresource_Integrity +--- +

Subresource Integrity (SRI) is een beveiliging dat browsers in staat stelt om bestanden (van bijvoorbeeld een CDN) te verifiëren, dat ze zijn geleverd zonder onverwachte manipulatie door een derde partij. Het werkt door het bestand te vergelijken met een cryptografische hash dat u doorgeeft.

+ +

Hoe Subresource Integrity helpt

+ +

Het gebruik van {{Glossary("CDN", "Content Delivery Networks (CDNs)")}} om bestanden  te hosten zoals scripts en stylesheets dat gedeeld zijn over meerdere websites kan positief zijn voor de snelheid en bandbreedte. Maar met CDNs bestaat er ook een risico. Als een aanvaller (hacker) de controle overneemt van de CDN, kan hij malicieuze code in de bestanden van de CDN injecteren of ze compleet vervangen. Hij kan dus ook alle websites aanvallen die de CDN gebruiken.

+ +

De Subresource Integrity stelt jouw in staat om dit risico te minimaliseren, door te garanderen dat de bestanden van je Web applicatie of Web document opvraagt (van een CDN of ergens anders) geleverd zijn zonder dat een derde partij de inhoud veranderd of ingevoegd heeft.

+ +

Gebruik van Subresource Integrity

+ +

Je gebruikt de Subresource Integrity door het specifiëren van een base64-ge-encodeerd cryptografische hash van een bron (file) dat je de browser op haalt, in de waarde van de integrity attribuut van een  {{HTMLElement("script")}} of {{HTMLElement("link")}} element.

+ +

Een integrity value begint met minstens één string, elke string bevat een voorvoegsel wat een bepaald hash algorithme aanduid (op dit moment zijn enkel sha256, sha384, en sha512 toegelaten)  , gevolgd door een "-", en eindigt met de base64-geëncodeerde hash.

+ +
+

Een integrity waarde mag meerdere hashes bevatten, ze worden gesplist door een spatie. Een bron zal geladen worden als het aan één van de hashes voldoet.

+
+ +

Een voorbeeld van een integrity string met base64-encoded sha384 hash:

+ +
sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC
+
+ +
+

Een integrity deelwaarde “hash” is een cryptographic digest gevormd door het toepasen van een bepaalde hash functie op een input (bijvoorbeeld, een script of stylesheet bestand). Maar het is gebruikelijk om hash te gebruiken i.p.v. cryptographic digest. Het wordt ook zo verder gebruikt in het artikel.

+
+ +

Hulpmiddellen voor het genereren van SRI hashes

+ +

Je kan SRI hashes genereren vanaf de command-line met openssl door dit commando op te roepen:

+ +
cat FILENAME.js | openssl dgst -sha384 -binary | openssl enc -base64 -A         
+ +

of met shasum met een oproep zoals deze:

+ +
shasum -b -a 384 FILENAME.js | awk '{ print $1 }' | xxd -r -p | base64
+ +
+

Notes:

+ + +
+ +

Een alternatief voor de command-line, is de SRI Hash Generator (https://www.srihash.org/ ), dit is een online hulpmiddel voor het genereren van SRI hashes.

+ +

Content Security Policy en Subresource Integrity

+ +

Je kan Content Security Policy gebruiken om je server te laten afdwingen dat bepaalde type bestanden Subresource Integrity moet gebruiken. Doe dit met {{CSP("require-sri-for")}} richtlijn in de CSP header. voorbeeld:

+ +
Content-Security-Policy: require-sri-for script;
+ +

Dit verplicht dat elk javaScript bestand een SRI moet hebben en dat deze ook geldig is.

+ +

Hetzelfde kan ook voor stylesheets:

+ +
Content-Security-Policy: require-sri-for style;
+ +

Je kan ze ook voor beide script en style specifiëren.

+ +

 

+ +

Cross-Origin Resource Sharing and Subresource Integrity

+ +

Browsers Controleren ook het resource met Cross-Origin Resource Sharing (CORS), zo kijkt men als het gebruikte gebruikt mag worden door de opvrager. Een bestand moet dus doorgegeven worden met een Access-Control-Allow-Origin header dat toe laat dat het bestand gedeeld word met de vragende bron. Als voorbeeld:

+ +
Access-Control-Allow-Origin: *
+ +

voorbeelden

+ +

In de volgende voorbeelden, neem aan dat oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC de verwachte SHA-384 hash waarde is van het script example-framework.js, en dat er een kopie gehost is op https://example.com/example-framework.js.

+ +

Subresource Integrity met het script element

+ +

Je kan gebruik maken van het {{HTMLElement("script")}} element, om de browser te verwittigen dat voor de uitvoering van https://example.com/example-framework.js script. Het eerst moet vergelijken met de verwachte hash in de integrity attribuut.

+ +
<script src="https://example.com/example-framework.js"
+        integrity="sha384-oqVuAfXRKap7fdgcCY5uykM6+R9GqQ8K/uxy9rx7HNQlGYl1kPzQho1wx4JwY8wC"
+        crossorigin="anonymous"></script>
+ +
+

Voor meer details over de crossorigin attribuut, zie CORS attributen.

+
+ +

Hoe browsers Subresource Integrity gebruiken

+ +

Browsers gebruiken SRI op deze manier:

+ +
    +
  1. Wanneer een browser een {{HTMLElement("script")}} of {{HTMLElement("link")}} element tegenkomt met een integrity attribuut, zal de browser nog voor de uitvoering van het script of het toepassen van de stijlregels. Het script of stylesheet vergelijken met de verwachte hash in de integrity attribuut.
  2. +
  3. Als het script of stylesheet niet de voldoet aan de verwachte waarde in de integrity attribuut, dan zal de browser het script of stylesheet blokkeren (weigeren om te voeren of toe te passen). Het zal een network error teruggeven om aan te duiden dat het ophalen van een script of stylesheet gefaald is.
  4. +
+ +

Specificaties

+ + + + + + + + + + + + + + + + + + + +
SpecificationStatusComment
{{SpecName('Subresource Integrity')}}{{Spec2('Subresource Integrity')}} 
{{SpecName('Fetch')}}{{Spec2('Fetch')}} 
+ +

Browser compatibiliteit

+ +

<script integrity>

+ +

Sectie

+ + + +

{{Compat("html.elements.script.integrity")}}

+ +

CSP: require-sri-for

+ +

Sectie

+ + + +

{{Compat("http.headers.csp.require-sri-for")}}

+ +

 

+ +

 

+ +

Zie ook

+ +

 

+ + + +

{{QuickLinksWithSubpages("/en-US/docs/Web/Security")}}

-- cgit v1.2.3-54-g00ecf