CSPscript-src 'self''nonce-xyz'frame-ancestors'none'default-src 'self'<script>

Política de seguretat de contingut

11 lectura mínimaSeguretat

La política de seguretat de contingut és la capçalera HTTP que permet que les pàgines web declarin què es pot carregar i executar. Un CSP estricte converteix XSS en un risc molt menor: fins i tot si un atacant injecta script, el navegador es nega a executar-lo. El compromís és la complexitat del desplegament, per això CSP s'adopta menys del que hauria de ser.

El cos complet de l'article es proporciona en anglès a continuació.

Política de seguretat de contingut (CSP) és una capçalera de resposta HTTP (i l'equivalent de metaetiqueta) que indica al navegador quins orígens poden carregar recursos, quins scripts en línia es poden executar i on s'han d'enviar els informes d'infraccions. Un CSP ben configurat redueix dràsticament l'impacte de les vulnerabilitats d'injecció; una de mal configurada proporciona una confiança falsa amb poca protecció real.

Què controla el CSP

La política es compon de directives, cadascuna especificant les fonts permeses per a un tipus de recurs:

  • script-src — Les fonts de JavaScript permeten carregar-se execute
  • style-src — fonts CSS
  • img-src — fonts d'imatge
  • connect-src — XHR, buscar, WebSocket targets
  • font-src — fonts de lletra
  • media-src — fonts d'àudio i vídeo
  • frame-src — què es pot carregar a iframes
  • frame-ancestors — què pot emmarcar aquesta pàgina (substitueix X-Frame-Options)
  • form-action — on els formularis es poden enviar
  • XPLZ47-XPLZ47 — quina URL es pot establir com a URL base
  • upgrade-insecure-requests — actualització automàtica HTTP a HTTPS
  • default-src — alternativa per a directives no especificades

A d'inici raonable política

Política de seguretat del contingut:
  default-src 'self';
  script-src 'self' 'nonce-randomBase64Value';
  style-src 'self' 'unsafe-inline';
  img-src dades "self": https:;
  connect-src 'self' https://api.example.com;
  ancestres-marcs 'cap';
  base-uri 'jo';
  forma-acció 'jo';
  report-uri https://example.com/csp-reports

Aquesta política diu: per defecte només es carrega des del mateix origen, els scripts han de ser del mateix origen o portar el nonce coincident, no incrustar en iframes d'altres llocs, etc. nonce.

Nonces vs hashes vs whitelists

Tres maneres de permetre scripts en línia específics:

  • Basat en nonce. Server genera un nonce aleatori nou per sol·licitud i inclou cada script permesos en CSP. Estricte i dinàmic, recomanat per a nous desplegaments.
  • Basat en hash. CSP especifica els hash SHA dels scripts en línia permesos. El navegador utilitza scripts en línia i compara. Funciona per a scripts estàtics el contingut dels quals no canvia.
  • Llista blanca d'origens. Permet scripts de dominis externs específics. Fàcil però crea grans superfícies d'atac: si algun domini de la llista blanca està compromès o té redireccions obertes, la política s'ignora. anti-pattern

    Molts llocs implementen CSP amb unsafe-inline i unsafe-eval a script-src per evitar trencar el codi existent. Bàsicament, no es tracta d'un CSP: l'objectiu és evitar que s'executin els scripts en línia i unsafe-inline elimina aquesta protecció. Els llocs amb aquesta configuració tenen capçaleres de CSP sense avantatges de CSP.

    El camí cap al valor de CSP real: elimina el codi insegur en línia, refactoritza el codi per utilitzar nonces o hashes i tracta les infraccions una per una. Dolorós però real.

    Mode només d'informe

    CSP es pot implementar en mode només d'informe: el navegador informa de les infraccions a un URI configurat però no les imposa. Útil per provar una nova política contra el trànsit real sense trencar el lloc:

    Content-Security-Policy-Report-Only: ...

    El llançament estàndard: desplegar en mode només d'informes, recopilar infraccions durant unes quantes setmanes, canviar al mode legítim durant unes setmanes, corregir-lo. Molts llocs grans tenen desplegaments de CSP de diversos mesos mitjançant aquest cicle d'iteració.

    CSP i XSS

    El benefici del titular: fins i tot quan la injecció XSS té èxit, l'script injectat no es pot executar si no té un noce vàlid. La càrrega útil de l'atacant arriba a la pàgina; el navegador es nega a executar-lo. La vulnerabilitat encara és present, però l'impacte es redueix dràsticament.

    Això no és un substitut per arreglar l'XSS; és una defensa en profunditat. Les dues capes han d'estar presents.

    Compatibilitat amb el navegador CSP

    Tots els navegadors principals des del 2016+. Les funcions de CSP 3 (nonces, estricte-dinàmic, hash) tenen un ampli suport. Les llacunes restants es troben en la gestió de casos extrems: interacció dels antecessors del marc amb X-Frame-Options, comportament variable de l'uri d'informe i de l'informe a, peculiaritats específiques del navegador en els informes d'errors.

    Complexitat operacional

    La implementació de CSP al món real és més difícil del que sembla (analítica, anuncis, supervisió) han d'estar a la política o fallar

  • In els gestors d'esdeveniments en línia (onclick="...") infringeixen el CSP tret que es permeti explícitament
  • Les aplicacions d'una pàgina amb contingut dinàmic necessiten una gestió acurada de vegades que les extensions de fila XPLZ15B poden violar de vegades CSP, generant soroll
  • Diferents equips poden necessitar diferents fragments de CSP; la fusió de polítiques no és trivial

Molts llocs que haurien de tenir CSP no ho tenen, perquè el cost operatiu sembla més gran que el benefici de seguretat percebut. El cost és real; el benefici també és real però invisible (no veus els atacs que no van passar).

Preguntes freqüents

CSP és un substitut de la desinfecció d'entrada?
No, defensa en profunditat. La desinfecció d'entrada evita la injecció; CSP impedeix que la injecció s'executi si falla la desinfecció. Tots dos haurien d'estar al seu lloc. Confiar només en CSP és fràgil; confiar només en la desinfecció fa dues dècades que falla.
He d'utilitzar nonces o hashes?
Nonces per a contingut dinàmic (cas habitual); hash per a scripts en línia fixos el contingut dels quals no canvia mai. La majoria dels marcs moderns inclouen suport de nonce de manera nativa. Els hash són conceptualment més senzills, però es converteixen en una càrrega de manteniment si canvia el contingut de l'script.
Per què encara és comú la connexió insegura?
Codi heretat que ho requereix (biblioteques amb controladors d'esdeveniments en línia, marcs antics). La refactorització requereix molt de temps. La solució honesta és el refactor; la drecera comuna és mantenir-se insegur en línia i confiar en altres defenses.
Com puc supervisar les infraccions de CSP?
Estableix report-to o report-uri a un punt final del col·lector. Moltes plataformes de seguretat (Cloudflare, Sucuri, personalitzada) accepten i analitzen informes de CSP. El trànsit del món real genera molt de soroll (extensions de navegador, bloquejadors d'anuncis); separar els atacs reals del soroll forma part de la càrrega de treball operativa.
Hi ha generadors de bones pràctiques CSP?
Eines com l'avaluador CSP de Google analitzen una política proposada i senyalen les debilitats. L'Observatori de Mozilla avalua les pàgines que inclouen la qualitat CSP. Utilitzeu-los per auditar; ajuden a destacar els errors comuns, però no substitueixen la comprensió de la política.
Explicació de la política de seguretat del contingut: la capçalera HTTP que defineix el que pot fer la vostra pàgina