CSP Builder
Zet de hosts die cside op je site waarneemt om in een Content-Security-Policy-header die je kunt uitrollen, onder Protection > CSP Builder.
CSP Builder zet de hosts die cside op je site waarneemt om in een Content-Security-Policy-header die je kunt uitrollen. Je vindt het onder Protection > CSP Builder in de sidebar, naast CSP Violations.
Een Content Security Policy met de hand schrijven vraagt dat je elke host kent waarvan je pagina’s laden, inclusief de hosts die je vendors namens jou laden. cside kijkt al naar die loads, dus de builder begint bij wat er echt op je site is gebeurd in plaats van bij een leeg bestand.
CSP Builder wordt geleidelijk uitgerold. Zie je het nog niet in je sidebar, neem dan contact op met support@cside.dev om het voor je team in te schakelen.
De builder genereert de header. Hij verstuurt hem nooit voor je en blokkeert nooit iets op je site. Jij kopieert de header naar de configuratie van je eigen server, CDN of framework, en jouw server is wat hem afdwingt.
Een domein kiezen
Als je CSP Builder op teamniveau opent, zie je je domeinen met een kolom Script data. Domeinen met Needs setup hebben nog geen scriptdata, en ze blijven selecteerbaar: die pagina laat zien hoe je het monitoringscript installeert. Selecteer een rij om de builder voor dat domein te openen.
In de builder schakelt het domeinmenu bovenaan tussen domeinen zonder de pagina te verlaten.
De voorgestelde policy
Het blok bovenaan de pagina is het antwoord waarvoor je kwam: de volledige header, live opnieuw opgebouwd terwijl je wijzigingen maakt. Hij bevat twee regels, en je hebt ze allebei nodig:
Content-Security-Policy(ofContent-Security-Policy-Report-Only), je policyReporting-Endpoints, waardoor overtredingen in je dashboard terechtkomen
Kopieer ze met de knop naast het blok. Alleen de eerste regel kopieren geeft je een werkende policy die niets terugmeldt aan cside.
Het rapportageadres wordt opgebouwd voor het specifieke domein waarop je zit, en het verschilt naargelang cside dat domein proxyt. Kopieer het altijd van de pagina in plaats van het zelf samen te stellen, anders worden de rapporten verworpen in plaats van verkeerd opgeslagen.
Lange policies worden ingekort tot de eerste regels onder een fade. Selecteer Show om alles te lezen. Kopieren en van modus wisselen werken ook terwijl hij is ingekort.
Eerst report-only, daarna enforce
De schakelaar Report-only / Enforce boven het blok bepaalt welke headernaam je kopieert. De inhoud van de policy is in beide gevallen identiek.
Rol eerst de report-only header uit. Browsers rapporteren dan wat de policy zou hebben geblokkeerd zonder iets te blokkeren, en die rapporten komen binnen in CSP Violations zodat je ziet wat je gemist hebt. Is die weergave eenmaal schoon, kom dan terug, zet hem op Enforce en rol de afdwingende header uit.
De controle “Before you enforce”
Het kopiëren van de afdwingende header opent een dialoogvenster Before you enforce. Het herinnert je eraan dat afdwingen elk verzoek blokkeert dat de policy niet noemt, en vraagt je eerst drie dingen te controleren:
- Inline scripts en styles. Geen enkele hostlijst staat ze toe. Gebruiken je pagina’s
<script>-blokken,onclick-handlers ofstyle-attributen, zet dan de inline-opties voor die directives aan. data:- enblob:-URL’s. Gebruikelijk voor iconen, fonts en inline afbeeldingen. Voeg ze toe aanimg-src,font-srcofmedia-srcals je ze gebruikt.- Je checkout- en loginflows. De policy dekt de pagina’s die bezoekers de afgelopen 30 dagen hebben geladen. Loop eerst je betaal- en aanmeldstappen door, zodat de leveranciers die ze laden in de lijst staan.
Selecteer Copy enforcing header om door te gaan, of Cancel om terug te gaan.
De default-src-schakelaar
Boven de directive-tabs voegt een policybrede schakelaar default-src ‘self’ een default-src 'self'-ondergrens aan de header toe. Die beperkt elk verzoektype dat de policy niet noemt tot je eigen origin, in plaats van die types onbeperkt te laten. Hij staat uit tot je hem aanzet, en cside raadt aan hem aan te zetten.
De ondergrens geldt alleen voor de fetch-directives die de policy weglaat. Hij bereikt nooit frame-ancestors, form-action, base-uri, sandbox of de rapportagedirectives, dus die moet je nog steeds zelf instellen.
Directives beoordelen
cside vult zeven directives op basis van wat het waarneemt: script-src, connect-src, img-src, style-src, frame-src, font-src en media-src. Elke directive krijgt een tab, en je beoordeelt ze een voor een. De telling onder de policy telt altijd de hele header, niet alleen de tab waarop je staat.
Elke tab draagt een markering:
| Markering | Wat het betekent |
|---|---|
| Een stip | Nog niet beoordeeld. Niemand heeft naar de hosts van deze directive gekeken. Hij wordt elke keer dat je hem opent opnieuw opgebouwd uit het huidige verkeer, met elke host standaard bepaald door zijn classificatie, en niets dat je uitzet wordt bewaard totdat je opslaat |
| Een vinkje | Beoordeeld en opgeslagen. Je beslissing over elke host die je hebt gezien, wordt bewaard. Hosts die later worden waargenomen, komen voorgesteld aan terug, zie hieronder |
| Grijs, “no data” | cside heeft op dit domein geen verkeer van dit type gezien, dus er is niets te beoordelen |
Een directive beoordelen legt je beslissingen vast. Daar draait het doorlopen van de tabs om: totdat iemand een directive opslaat, heeft niemand bevestigd dat zijn hosts in je policy thuishoren, en de schakelaars die je omzet gaan verloren wanneer je weggaat. De tab openen en opslaan is genoeg. Je hoeft niets te wijzigen. De waarschuwing onder de hostlijst telt de directives die nog niet beoordeeld zijn, want een policy afdwingen die niemand heeft beoordeeld, blokkeert alles wat die directives hebben gemist.
Selecteer Save als je klaar bent met een tab. Opslaan verplaatst je niet en behoudt je filter.
Hosts die na het opslaan verschijnen
Opslaan legt een directive niet vast op de hosts die je hebt gezien. Het legt alleen je antwoord voor die hosts vast. Een host die na de save voor het eerst is waargenomen, was nooit een beslissing van jou, dus de builder behandelt hem in een beoordeelde en een niet-beoordeelde directive op dezelfde manier: hij komt aangezet terug, standaard bepaald door zijn classificatie (aan voor alles behalve Blocked by you en Flagged malicious), en hij staat in de header die bovenaan de pagina wordt getoond. De volgende keer dat je die header kopieert, zit de nieuwe host erin, of iemand nu opnieuw opslaat of niet.
Dat is een voorstel, geen wijziging van je live policy: niets bereikt je site totdat je de gekopieerde header uitrolt. Nieuwe hosts standaard aanzetten betekent dat een leverancier die na je save is gaan werken, niet stilzwijgend uit je volgende kopie verdwijnt. Controleer wanneer je terugkomt in de builder de hosts die je niet herkent, zet ze uit en sla opnieuw op, zodat de beslissing wordt bewaard.
Opslaglimieten
Een directive kan tot 5.000 sources bevatten, en de hele opgeslagen policy tot 512 KB aan sources. Opslaan voorbij een van beide limieten mislukt met een foutmelding die de limiet noemt. Loop je ertegenaan, gebruik dan wildcard-families (hieronder) in plaats van elk subdomein op te sommen, of zet hosts uit die je niet nodig hebt.
Hostgroepen
Binnen een directive worden hosts gegroepeerd op basis van hoe cside ze classificeert, en elke groep heeft een bulkschakelaar in de kop, behalve waar aangegeven.
| Groep | Wat het betekent | Standaard aan |
|---|---|---|
| First party | Je eigen domein | Ja |
| Known vendors | Een vendor die cside herkent als een groot, gerenommeerd merk | Ja |
| Approved by you | Een hostname die je team heeft goedgekeurd in Resources Inventory | Ja |
| Unvetted | Alles wat cside niet kon toewijzen. Dit is de groep waarvoor de beoordeling bestaat | Ja |
| Blocked by you | Je team heeft deze host geblokkeerd | Nee |
| Flagged malicious | cside heeft deze host voor alle klanten geblokkeerd | Nee |
Unvetted, Blocked by you en Flagged malicious hebben geen bulkschakelaar. De meeste hosts op de meeste domeinen belanden in Unvetted, dus een enkele schakelaar zou bijna je hele policy herschrijven zonder dat iemand ernaar keek, en een geblokkeerde of kwaadaardige host weer aanzetten hoort een beslissing te zijn die je host voor host neemt met de waarschuwing voor je.
Een groep inklappen verbergt alleen de rijen. De hosts houden de stand waarin je ze achterliet, tellen nog steeds mee in de telling en gaan nog steeds mee in de opgeslagen policy. Zoeken klapt elke groep uit, dus een host die je zoekt zit nooit verborgen achter een ingeklapte kop.
Alertaantallen naast een host zijn ter informatie. Een alert verandert nooit of een host aanstaat.
*.csidetm.com en *.csidefd.com staan altijd in de policy en kunnen niet worden uitgezet. Een policy die het script van cside zou blokkeren, stopt de monitoring waaruit hij is opgebouwd.
Wildcard-leveranciersfamilies
Wanneer een leverancier vanaf veel subdomeinen serveert, zoals a.vendor.com, b.vendor.com en cdn.vendor.com, vouwt de builder ze samen tot één rij *.vendor.com. De familierij heeft één schakelaar en telt als één entry in de policy. Vouw de rij uit om de adressen te zien die hij dekt.
Zet je de wildcard uit, dan kun je één voor één de exacte adressen kiezen die je nodig hebt, en elk adres telt dan als een eigen entry. Een familie waarvan de adressen al gedekt worden door een bredere wildcard die je aan hebt staan, heeft geen eigen schakelaar; zet die bredere wildcard uit om de adressen afzonderlijk te beheren.
Bij een Mixed-familie zijn slechts enkele adressen afzonderlijk toegestaan. Nieuwe adressen staan standaard uit. Een Covered-familie valt onder een breder goedgekeurd jokerteken en heeft geen eigen schakelaar. Als cside een adres binnen een toegestane familie blokkeert, verschijnt een waarschuwing: het jokerteken staat dat adres nog steeds toe in de gegenereerde CSP.
Policy options
Boven de hostlijst schakelt Policy options de bron-keywords die een directive kan dragen. Welke verschijnen hangt af van de directive die je bewerkt:
| Keyword | Wat het doet |
|---|---|
'self' | Staat resources toe die vanaf je eigen origin worden geserveerd. Standaard aan en beschikbaar op elke directive |
'unsafe-inline' | Staat inline blokken toe. Aangeboden op script-src en style-src, op beide standaard uit. Op style-src staat het style-attributen en <style>-blokken toe; op script-src staat het <script>-blokken en handlers in onclick-stijl toe. Elke schakelaar noemt het gevolg: op script-src draait elk inline script op je pagina’s, ook een dat in de pagina is geïnjecteerd |
'report-sample' | Neemt een fragment van de geblokkeerde code op in elk violation-rapport. Aangeboden op script-src en style-src, waar het helpt te achterhalen wat er is geblokkeerd |
Een host toevoegen die cside niet heeft gezien
Selecteer Add a host in de werkbalk boven de lijst om met de hand een hostname toe te voegen. Gebruik dit voor een host waarvan je weet dat je site hem nodig heeft maar die nog niet in het verkeer is verschenen, zoals een vendor die je op het punt staat te lanceren of iets dat alleen laadt op een pagina die cside niet monitort.
Invoer wordt gevalideerd tegen de directive die je bewerkt. Hostnames worden overal geaccepteerd, met een *.-wildcard vooraan als je die nodig hebt. data: en blob: worden alleen geaccepteerd onder img-src, font-src en media-src. Poorten, paden, schema’s en keywords tussen aanhalingstekens worden geweigerd.
Als je al een CSP verstuurt
Wanneer cside een Content-Security-Policy-header op het domein heeft waargenomen, verschijnt er boven de policy een melding met de header die de afgelopen 30 dagen het vaakst is gezien.
Voeg onze policy samen met de jouwe in plaats van je header te vervangen. De builder vult alleen directives die hij met waargenomen verkeer kan onderbouwen, dus een policy die hier wordt gegenereerd zegt niets over frame-ancestors, form-action, base-uri of object-src. Je hele header hierdoor vervangen laat elke directive vallen die je al afdwong en waarvoor wij geen suggestie doen.
De policy in de melding is wat cside heeft waargenomen, niet je serverconfiguratie. Nonces en querystrings worden genormaliseerd naar wildcards, en de header kan afwijken van de echte header van een specifieke pagina. Vergelijk hem dus met je configuratie in plaats van hem te kopieren.
Voordat je uitrolt
- Rol eerst de report-only header uit en volg CSP Violations voordat je gaat afdwingen
- Loop elke directive-tab door. De waarschuwing onder de hostlijst vertelt je hoeveel er nog niet beoordeeld zijn en herinnert je eraan dat afdwingen alles zou blokkeren wat ze hebben gemist
- Kom terug nadat je hebt uitgerold. Hosts die na je save zijn waargenomen, komen aangezet terug en belanden in de volgende header die je kopieert, dus beoordeel ze en sla opnieuw op
- Kopieer beide regels, de policy en
Reporting-Endpoints - Voeg hem samen met je bestaande header in plaats van die te vervangen
Gerelateerde pagina’s
- Je CSP aanpassen: rapportage van CSP-overtredingen, bewaartermijnen en het exporteren van rapporten
- cside toevoegen aan je CSP: wat je moet aanpassen in een policy die je al beheert zodat het cside-script blijft werken
- Resource-inventaris: beoordeel en keur hostnames goed. Goedgekeurde hostnames komen hier terecht in de groep Approved by you
Thanks for your feedback!