¿Qué es una política de seguridad de contenidos?
Una política de seguridad de contenidos (CSP) es un mecanismo de seguridad para sitios web. Define las fuentes desde las que un sitio web está autorizado a cargar recursos como scripts, imágenes u hojas de estilo. A través de esta definición, la CSP protege contra varios ataques, en particular el cross-site scripting (XSS), restringiendo la ejecución de código no fiable. En resumen, la CSP ayuda a aumentar la seguridad de un sitio web controlando qué tipos de contenido pueden ejecutarse en la página.
¿Por qué es necesaria una política de seguridad de contenidos?
Una política de seguridad de contenidos (CSP) es importante porque proporciona un mecanismo de protección crucial para los sitios web. Hay varias buenas razones para establecer una:
Protección contra el cross-site scripting (XSS): El XSS es un método habitual de ataque, que suele implicar la inyección de código JavaScript malicioso en los sitios web.
Un CSP ayuda a minimizar estos ataques controlando qué fuentes y tipos de incrustación están permitidos para los scripts de una página. XSS (Cross-Site Scripting) es un tipo de ataque en el que los atacantes inyectan código malicioso en un sitio web, que luego es ejecutado por otros usuarios.
He aquí un ejemplo sencillo:Un atacante crea un comentario: Supongamos que hay un sitio web con una función de comentarios. Un atacante introduce un comentario de la siguiente manera:
<script>
alert('¡Has sido hackeado!');
</script>
Se muestra el comentario en el sitio web:
Cuando otro usuario ve este comentario, se ejecuta el código inyectado y aparece una ventana emergente con el mensaje "¡Has sido hackeado!" En este ejemplo, el atacante utiliza la función de comentario para insertar código JavaScript malicioso. A continuación, el código es ejecutado por otros usuarios que vean el comentario, lo que puede dar lugar a acciones potencialmente dañinas.
Limitar los ataques de clickjacking:
CSP permite controlar qué dominios pueden incrustar contenido en elementos iframe para evitar ataques de clickjacking, un tipo de ataque en el que un actor malicioso intenta manipular las acciones de un usuario en un sitio web ocultando fraudulentamente la interfaz de usuario.
He aquí un ejemplo sencillo: El atacante creaun sitio web fraudulento: El atacante crea un sitio web con una sobreimpresión invisible que imita a un sitio web de confianza, digamos"www.bank-example.com".
<style>
#overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
opacity: 0.5;
z-index: 9999;
}
</style>
<div id="overlay"></div>
<iframe src="http://www.bank-example.com" width="100%" height="100%" frameborder="0"></iframe>
El usuario visita la web fraudulenta:
El usuario visita el sitio web fraudulento del atacante, donde la sobreimpresión cubre el sitio web real.El usuario realiza acciones involuntarias:
Dado que la superposición es invisible, el usuario puede realizar acciones sin saberlo en el sitio web real mientras piensa que está interactuando con el sitio web fraudulento. En este ejemplo, el usuario puede pensar que está interactuando en el sitio web fraudulento mientras que en realidad las acciones se están realizando en el sitio web real.
Los ataques de clickjacking pueden prevenirse implementando medidas como el uso de la cabecera X-Frame-Option para restringir la incrustación de la página en IFRAMEs.
- Restricción de conexiones inseguras:
CSP puede configurarse para que sólo permita la carga de recursos a través de conexiones HTTPS seguras, lo que mejora la seguridad de la transferencia de datos. - Protección contra contenidos maliciosos: Al controlar con precisión las fuentes permitidas para recursos como imágenes, scripts y hojas de estilo, CSP ayuda a reducir el riesgo de contenidos maliciosos o inseguros.
En general, una política de seguridad de contenidos contribuye a reforzar la seguridad y la fiabilidad de un sitio web al permitir el control de las fuentes de recursos y proteger contra diversos tipos de ataques.
¿Cómo configurar una política de seguridad de contenidos con TYPO3?
TYPO3 no tenía soporte nativo para configurar una política de seguridad de contenido hasta la versión 11. Era posible configurar una utilizando cabeceras de servidor web configuradas manualmente, pero esto tenía una desventaja importante, a saber, la falta de apoyo a los valores "nonce" al integrar scripts en línea o bloques CSS. Desde TYPO3 12, esta característica está ahora integrada y se puede configurar una política de seguridad de contenido completa, incluyendo "nonce". TYPO3 12 también ofrece una herramienta de comprobación en el CMS con un registro de las violaciones de la CSP.
Un "nonce" es una abreviatura de "Number Used Once". En contextos de seguridad de la información y criptográficos, un nonce es un número o cadena de caracteres aleatorios o de uso único. La principal característica de un nonce es que sólo se utiliza durante un periodo de tiempo limitado o para una aplicación específica. Esto significa que no se reutiliza y, por tanto, ofrece una seguridad adicional.
Una política de seguridad de contenidos (CSP) puede utilizar un valor nonce para controlar la ejecución de scripts en línea. Al añadir un atributo nonce a una etiqueta script, el script sólo se ejecutará si contiene el mismo valor nonce que se encuentra en la cabecera de seguridad de entrega de páginas del servidor web, lo que ayuda a evitar ataques XSS.
Ejemplo de una cabecera CSP con un nonce:
Content-Security-Policy: script-src 'nonce-abc123'
Aquí, el script sólo se ejecuta si contiene el nonce correcto, en este caso "abc123". Este valor nonce debe cambiar con cada carga de página y debe estar en la cabecera del servidor web, así como en el script inline del frontend del sitio web. Por lo tanto, esta función no es viable sin el apoyo del CMS.
Para configurar un CSP en TYPO3 12, basta con almacenar un archivo csp.yaml en sites/<my_site>/csp.yaml con el siguiente contenido:
# Hereda por defecto las mutaciones de política de frontend no específicas del sitio (habilitadas por defecto)
heredarPorDefecto: true
mutations:
# Resulta en `default-src 'self'`.
- modo: set
directiva: `default-src
fuentes:
- "'self'"
# Extiende la directiva antecesora ('default-src'),
# así reutiliza 'self' y añade fuentes adicionales
# Resulta en `img-src 'self' data: *.typo3.org`
- modo: extender
directiva: 'img-src'
fuentes:
- 'data:'
- 'https://*.typo3.org'
# Extiende la directiva antecesora ('default-src'),
# así reutiliza `self' y añade fuentes adicionales
# Resulta en `script-src 'self' 'nonce-[random]'`.
# ('nonce-proxy' se sustituye al compilar la directiva)
- modo: extender
directiva: 'script-src'
fuentes:
- "'nonce-proxy'"
# Resulta en `worker-src blob:`
- modo: set
directiva: 'worker-src'
fuentes:
- 'blob:'
En este csp.yaml puedes ahora establecer las reglas necesarias para cada directiva de un CSP. Puedes elegir entre "extend" o "set" para cada directiva. Con "extender" puede extender o adaptar las reglas ya definidas para una directiva del núcleo TYPO3 o de otra extensión. Por ejemplo, el núcleo TYPO3 ya establece los valores necesarios para YouTube o Vimeo Video Player si éstos se utilizan en el contenido de las páginas. Con "set" puede sobrescribir completamente una directiva con su propia definición. Si establece el valor "nonce-proxy" como "fuentes" para una directiva, un valor nonce se genera aquí para cada página renderizada por TYPO3 en el encabezado del servidor web. Para mostrar el mismo valor nonce en su etiqueta <script> o <style> en el frontend, puede utilizar el Fluid ViewHelper "f:security.nonce":
<script nonce="{f:security.nonce()}">const inline = <script>;</script>.
O puede incluir sus JavaScripts con uno de los métodos page.includeJS... de Typoscript. El valor nonce se establece automáticamente desde la versión 12 de TYPO3.
También puede utilizar php para acceder al valor nonce actual en su propia extensión, si es necesario:
// use TYPO3\CMS\Core\Domain\ConsumableString
/** @var ConsumableString|null $nonce */
$nonceAttribute = $this->request->getAttribute('nonce');
if ($nonceAttribute instanceof ConsumableString) {
$nonce = $nonceAttribute->consume();
}
Muy importante: Todo esto sólo funciona si se activa la bandera característica "Seguridad: frontend hacer cumplir la política de seguridad de contenido" en el "Feature Toggles" en el TYPO3 12 Herramienta de instalación en "Configuración".
A continuación, puede comprobar el éxito de su CSP con varias herramientas. Aquí está un ejemplo de nuestro sitio web, que ya se está ejecutando en TYPO3 12 con CSP.
También hemos establecido algunos otros encabezados de seguridad, además de la CSP:https://securityheaders.com/?q=https%3A%2F%2Fwww.aemka.de%2F&followRedirects=on
¿Desea proteger también su sitio web TYPO3 con un CSP?
¡Pida presupuesto!