Saltearse al contenido

SRI para contenido SSR

Por defecto, Astro-Shield no habilita SRI para contenido SSR (renderizado en el servidor), pero puedes habilitarlo fácilmente estableciendo la opción sri.enableMiddleware a true en tu archivo de configuración de Astro.

import { resolve } from 'node:path'
import { defineConfig } from 'astro/config'
import { shield } from '@kindspells/astro-shield'
const rootDir = new URL('.', import.meta.url).pathname
const modulePath = resolve(rootDir, 'src', 'generated', 'sriHashes.mjs')
export default defineConfig({
integrations: [
shield({
sri: {
hashesModule: modulePath,
enableMiddleware: true,
},
}),
],
})

Reforzando la seguridad para contenido dinámico

Listas de permitidos

Astro-Shield bloqueará cualquier recurso de origen cruzado que no esté explícitamente permitido. Esto se debe a que, de lo contrario, podría abrir la puerta a una variedad de vulnerabilidades de seguridad causadas por cargar contenido no confiable y marcarlo como seguro.

Podemos definir una lista de URLs de recursos permitidos como en el siguiente ejemplo:

import { resolve } from 'node:path'
import { defineConfig } from 'astro/config'
import { shield } from '@kindspells/astro-shield'
const rootDir = new URL('.', import.meta.url).pathname
const modulePath = resolve(rootDir, 'src', 'generated', 'sriHashes.mjs')
export default defineConfig({
integrations: [
shield({
sri: {
hashesModule: modulePath,
enableMiddleware: true,
scriptsAllowListUrls: [
'https://code.jquery.com/jquery-3.7.1.slim.min.js',
],
stylesAllowListUrls: [
'https://cdn.jsdelivr.net/npm/bootstrap@5.3.3/dist/css/bootstrap.min.css',
],
},
}),
],
})

Bloqueo de recursos embebidos

Aunque Astro-Shield no bloquea recursos embebidos por defecto, es recomendable bloquearlos en ciertos casos para prevenir ciertos ataques XSS. Podemos hacerlo estableciendo las opciones sri.allowInlineScripts a false o 'static' (este último permite recursos embebidos solo en contenido estático).

import { resolve } from 'node:path'
import { defineConfig } from 'astro/config'
import { shield } from '@kindspells/astro-shield'
const rootDir = new URL('.', import.meta.url).pathname
const modulePath = resolve(rootDir, 'src', 'generated', 'sriHashes.mjs')
export default defineConfig({
integrations: [
shield({
sri: {
hashesModule: modulePath,
enableMiddleware: true,
allowInlineScripts: false,
allowInlineStyles: 'static',
},
}),
],
})