Política de seguretat de contingut
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-reportsAquesta 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-inlineiunsafe-evala 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.