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).pathnameconst 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).pathnameconst 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).pathnameconst modulePath = resolve(rootDir, 'src', 'generated', 'sriHashes.mjs')
export default defineConfig({ integrations: [ shield({ sri: { hashesModule: modulePath, enableMiddleware: true,
allowInlineScripts: false, allowInlineStyles: 'static', }, }), ],})