内容安全策略生成器

生成CSP标头,防御XSS攻击和代码注入。包含安全预设及Nginx、Apache、HTML meta标签配置。

安全预设

配置指令

fetch Directives

default-src

Fallback for other fetch directives

Examples: 'self', 'self' https:, 'none'
script-src

Sources for JavaScript execution

Examples: 'self', 'self' 'unsafe-inline', 'self' https://cdn.example.com
style-src

Sources for stylesheets

Examples: 'self', 'self' 'unsafe-inline', 'self' https://fonts.googleapis.com
img-src

Sources for images

Examples: 'self', 'self' data:, 'self' https: data:
font-src

Sources for fonts

Examples: 'self', 'self' https://fonts.gstatic.com, 'self' data:
connect-src

Sources for XHR, WebSocket, and EventSource

Examples: 'self', 'self' https://api.example.com, 'self' wss:
media-src

Sources for audio and video

Examples: 'self', 'self' https://media.example.com, 'none'
object-src

Sources for plugins (object, embed, applet)

Examples: 'none', 'self', 'self' https://plugins.example.com
frame-src

Sources for nested browsing contexts (iframe)

Examples: 'self', 'none', 'self' https://www.youtube.com
worker-src

Sources for Worker, SharedWorker, or ServiceWorker

Examples: 'self', 'none', 'self' blob:
manifest-src

Sources for web app manifests

Examples: 'self', 'none', 'self' https://cdn.example.com

document Directives

base-uri

Restrict URLs for <base> elements

Examples: 'self', 'none', 'self' https://example.com

navigation Directives

form-action

Restrict form submission URLs

Examples: 'self', 'none', 'self' https://api.example.com
frame-ancestors

Restrict embedding this page in frames

Examples: 'none', 'self', 'self' https://trusted.example.com

reporting Directives

report-uri

URL to send CSP violation reports

Examples: https://example.com/csp-report, /csp-violation-endpoint

生成的内容安全策略

CSP策略

default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'

HTTP标头

Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'

HTML Meta标签

<meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'">

Nginx配置

add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'";

Apache配置

Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self'; font-src 'self'; connect-src 'self'; media-src 'self'; object-src 'none'; frame-src 'self'; worker-src 'self'; manifest-src 'self'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'"

下载配置

安全提示

  • 先使用仅报告模式识别可能造成破坏的更改
  • 尽量避免使用'unsafe-inline'和'unsafe-eval'
  • 对内联脚本/样式使用nonce或哈希值代替
  • 随着网站发展定期审查和更新CSP
  • 监控CSP违规报告以发现攻击和错误配置
  • 对现代CSP实现使用带有nonce的'strict-dynamic'

Share this tool

Help others discover Content Security Policy Generator

关于此工具

工作原理

  • 配置CSP指令以控制资源加载
  • 使用安全预设快速设置常见安全级别
  • 为各种Web服务器生成标头
  • 在强制执行前使用仅报告模式测试

常见使用场景

  • 防止XSS攻击和代码注入
  • 控制第三方资源加载
  • 实施深度防御安全策略
  • 遵守安全最佳实践

常见问题

什么是内容安全策略(CSP),为什么需要它?

CSP是一种安全功能,通过控制网站可加载的资源(脚本、样式、图片等)来防止跨站脚本(XSS)攻击和数据注入。它作为防止恶意代码执行的额外安全层。

强制模式和仅报告模式有什么区别?

强制模式会主动阻止违反CSP策略的行为,而仅报告模式记录违规但不阻止。建议先使用仅报告模式测试策略,在上线之前识别潜在问题。

应该选择哪个安全预设?

选择'严格安全'以获得最大保护,'中等安全'适合大多数使用外部资源的网站,'宽松'适合开发或旧版网站。选择预设后可以自定义指令以满足特定需求。

能否使用meta标签代替HTTP标头实现CSP?

可以使用HTML meta标签实现CSP,但建议使用HTTP标头,因为它提供更多功能和安全性。注意,仅报告模式只能通过HTTP标头实现,不能通过meta标签。

'unsafe-inline'是什么意思,应该避免它吗?

'unsafe-inline'允许执行内联脚本和样式,这可能带来安全风险。最好使用外部文件或为内联内容实现nonce/哈希值。只有在确实需要旧版兼容性时才使用'unsafe-inline'。

如何处理Google Analytics或CDN等第三方服务?

将特定域名添加到相应指令中(例如,analytics使用script-src,字体使用font-src)。例如,将'https://www.google-analytics.com'添加到script-src以支持Google Analytics。尽量具体指定,而不是使用通配符。

如果CSP破坏了我的网站,该怎么办?

首先使用仅报告模式在不影响功能的情况下识别违规。检查浏览器控制台中的CSP违规错误,然后更新策略以允许必要的资源。循序渐进地收紧安全策略。

如何实现CSP违规报告?

设置report-uri指令指向可以接收CSP违规数据POST请求的端点。许多服务提供CSP违规监控,或者您可以创建自己的端点来记录违规。

能在同一页面上使用多个CSP策略吗?

如果定义了多个CSP策略(通过标头和meta标签),则应用最严格的策略。建议使用一个配置良好的策略,而不是多个可能相互冲突的策略。

frame-src和frame-ancestors有什么区别?

frame-src控制您的页面可以在iframe中嵌入哪些URL,而frame-ancestors控制哪些URL可以将您的页面嵌入其iframe中。使用frame-ancestors: 'none'可以防止您的页面被任何地方嵌入。

应该多久更新一次CSP策略?

每当添加新的第三方服务、更改网站架构或收到CSP违规报告时,都应审查CSP策略。定期安全审计应包括CSP策略审查。

CSP在所有浏览器上都有效吗?

CSP被所有现代浏览器支持,但某些旧版本对较新CSP功能的支持可能有限。CSP会优雅降级——不支持的指令会被忽略。建议在不同浏览器上测试您的策略。

Share ToolsZone

Help others discover these free tools!

分享此页面

CSP生成器 | 内容安全策略标头