Hola, bienvenido a otra mini publicación. Se trata de CSP. Comencemos definiendo la política de seguridad de contenido de CSP. Esta es una capa de seguridad basada en la mitigación de ataques XSS e inyección de datos.
starred: true
Para activar CSP debes realizar una configuración en tu servidor para agregar este encabezado `Content-Security-Policy` en algunas versiones anteriores este encabezado era `X-Content-Security-Policy` `X-WebKit-CSP`
o alternativamente, puedes establecer una metaetiqueta que lo defina así, pero no se recomienda:
```html
```
## ¿Qué podemos delimitar con una CSP?
Podemos establecer políticas basadas en estas directivas:
- **default-src:** Esta directiva establece una lista de fuentes predeterminada para todas las demás directivas.
- **script-src:** Esta directiva restringe qué scripts puede ejecutar el recurso protegido. La directiva \* también controla otros recursos, como hojas de estilo XSLT \[XSLT\], que pueden hacer que el agente de usuario ejecute scripts.
- **style-src:** Esta directiva restringe qué estilos puede aplicar el usuario al recurso protegido.
- **img-src:** Esta directiva restringe desde qué URIs el recurso protegido puede cargar imágenes.
- **font-src:** Esta directiva restringe desde qué URIs el recurso protegido puede cargar fuentes. Esto se aplica al procesar la regla CSS [@font](https://hashnode.com/@font)\-face.
- **connect-src:** Esta directiva restringe desde qué URIs el recurso protegido puede cargar utilizando interfaces de script. Esto se aplica al método open() de un objeto XMLHttpRequest, al constructor WebSocket y al constructor EventSource.
- **media-src:** Esta directiva restringe desde qué URIs el recurso protegido puede cargar video y audio. Esto se aplica a los datos de un clip de video o audio, como al procesar el atributo src de los elementos video, audio, source o track.
- **object-src:** Esta directiva restringe desde qué URIs el recurso protegido puede cargar plugins. Esto se aplica al atributo data de un elemento object, al atributo src de los elementos embed o a los atributos code o archive de un elemento applet. Los datos de cualquier elemento object, embed o applet deben coincidir con las fuentes de objetos permitidas para ser cargados.
- **frame-src:** Esta directiva restringe desde dónde el recurso protegido puede incrustar marcos (frames).
- **report-uri:** Este URI debe usar el mismo puerto y protocolo que el recurso protegido y debe recibir una solicitud POST.
### Los valores que podemos establecer para estas directivas son básicamente los siguientes:
- **none**: Niega todo acceso.
- **\***: Permite acceso a todo.
- **Self**: El URI debe tener el mismo esquema, host y puerto que el URI del recurso protegido.
- **Data**: Datos incrustados, como una imagen codificada en base64.
- **Host**: Este es el último elemento donde podemos establecer URIs aceptables para inyectar contenido.
> Por ejemplo, si queremos establecer una política predeterminada para aceptar recursos desde la URL propia y datos base64 solo desde [mysite.com](https://mysite.com), podemos configurar la política de esta manera:
```bash
Content-Security-Policy: "default-src 'self' data: https://mysite.com"
```
> En el caso de las directivas script-src y style-src, tenemos valores adicionales para configurar como los siguientes:
- **inline**: Entidades HTML en línea, como:
```html
```
o en el caso de estilos:
```html
```
Y en el caso de los scripts, podemos limitar la ejecución de eval:
Con la directiva Eval.
> Complementemos el último ejemplo de la política permitiendo CSS y JS en línea, y permitiendo eval en JS. El resultado es:
```
Content-Security-Policy: "default-src 'self' data: https://giorgiosaud.com; script-src 'unsafe-inline' 'unsafe-eval'; style-src 'unsafe-inline'"
```
Podemos establecer directivas especiales para cualquiera de ellas, superponiendo las de default-src o configurar solo las directivas deseadas que necesitemos, y eso es todo.
Esperando que ahora sepas un poco más sobre CSP, nos vemos en otro post, y aquí tienes otro post interesante sobre CORS y solicitudes Preflight.
> ¡Espero que te sea útil! Avísame si necesitas más ayuda.