Content Security Policy (CSP) es una cabecera de respuesta HTTP que limita, mediante una lista blanca, los orígenes de los recursos que puede cargar una página web (scripts, hojas de estilo, imágenes, fuentes, iframes, etc.). Es una capa importante de la defensa en profundidad que reduce considerablemente los daños de los ataques XSS (cross-site scripting).
Como sintaxis básica, se especifican los orígenes permitidos para cada tipo de recurso, por ejemplo Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com. 'self' solo permite el mismo origen, y los dominios externos deben indicarse de forma explícita en la lista.
La importancia de CSP en los servicios de URLs cortas es doble. En primer lugar, aplicar CSP a las páginas de vista previa de las URLs cortas y al panel permite impedir que se ejecuten los scripts de un atacante aunque llegara a existir una vulnerabilidad XSS. En segundo lugar, lo que CSP puede limitar en cuanto a la navegación se reduce al destino de envío de los formularios (form-action) y a las páginas padre que incrustan la propia página (frame-ancestors). La URL de destino de la redirección en sí queda fuera de su alcance. En un diseño que incrusta el destino de la redirección en un iframe en la página de vista previa, también hay que tener en cuenta que, si el otro sitio especifica frame-ancestors, se impedirá su visualización.
Como puntos que hay que cuidar en la implementación, se recomienda una introducción por etapas: (1) recopilar los informes de infracciones con la directiva report-to, añadiendo también la obsoleta report-uri para los navegadores que no admiten la primera, para detectar el bloqueo de recursos legítimos; (2) comprobar primero el impacto con la cabecera Content-Security-Policy-Report-Only antes de aplicarla en producción; y (3) usar nonce o hash para los scripts en línea y evitar 'unsafe-inline'.