SRI для SSR контента
По умолчанию, Astro-Shield не включает SRI для контента,
отрендеренного на стороне сервера (Server-Site-Rendering, SSR), но вы можете легко включить его,
установив опцию sri.enableMiddleware
в true
в вашем конфигурационном файле 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, }, }), ],})
Усиление безопасности для динамического контента
Списки разрешенных ресурсов
Astro-Shield будет блокировать любые кросс-доменные ресурсы, которые не разрешены явно. В противном случае это может открыть возможности для различных уязвимостей безопасности, вызванных загрузкой ненадежного контента и его пометкой как безопасного.
Мы можем определить список разрешенных URL-адресов ресурсов, как в примере ниже:
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', ], }, }), ],})
Блокировка inline-ресурсов
Хотя Astro-Shield по умолчанию не блокирует inline-ресурсы,
в некоторых случаях это может быть хорошей идеей, чтобы предотвратить
XSS атаки.
Вы можете сделать это установив опции sri.allowInlineScripts
и
sri.allowInlineStyles
в false
или 'static'
(этот параметр позволяет использовать inline-ресурсы
только в статическом контенте).
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', }, }), ],})