安全工具/CSP构建器
CSP构建器
可视化构建Content-Security-Policy头
预设
指令
Default fallback for other directives
Controls allowed JavaScript sources
Controls allowed CSS sources
Controls allowed image sources
Controls allowed font sources
Controls allowed fetch/XHR/WebSocket targets
Controls allowed iframe sources
Controls allowed plugin sources (Flash, etc.)
Restricts URLs for <base> element
Restricts form submission targets
Controls who can embed this page
Upgrade HTTP to HTTPS automatically
选项
启用后,违规行为会被报告但不会被阻止。适合测试使用。
生成的CSP头
Content-Security-Policy: default-src 'self'实现示例
add_header Content-Security-Policy "default-src 'self'";
Header set Content-Security-Policy "default-src 'self'"
<meta http-equiv="Content-Security-Policy" content="default-src 'self'">
CSP构建器指南
学习如何创建Content-Security-Policy头来保护您的网站
什么是Content-Security-Policy?
Content-Security-Policy(CSP)是一种HTTP响应头,帮助防止跨站脚本攻击(XSS)、点击劫持和其他代码注入攻击。它允许您指定允许在网站上加载的内容来源,让您对脚本、样式、图片和其他资源进行精细控制。
使用方法
- 选择一个预设(严格、中等或宽松)作为起点
- 根据需要启用和配置各个指令
- 查看安全警告并相应调整设置
- 复制生成的头并添加到Web服务器配置中
最佳实践
常见问题
如果CSP设置太严格会怎样?
如果CSP太严格,合法资源可能被阻止,导致网站功能失效。这就是为什么建议先使用仅报告模式。在此模式下,违规会被报告到服务器(如果配置了report-uri),但不会实际被阻止,让您能在强制执行策略前发现问题。
'self'和'none'有什么区别?
'self'只允许来自与您网站相同源(相同协议、主机和端口)的内容。'none'阻止该类型的所有内容。例如,object-src 'none'阻止所有插件(Flash、Java等)加载,这是安全最佳实践。
为什么'unsafe-inline'被认为是危险的?
'unsafe-inline'允许内联脚本和样式,这会削弱CSP的大部分XSS防护。能够注入HTML的攻击者也能注入内联脚本。应该使用nonce(script-src 'nonce-random123')或hash(script-src 'sha256-...')来允许特定的内联脚本同时阻止注入的脚本。
如何允许Google Analytics或其他第三方脚本?
将特定域名添加到script-src指令中。对于Google Analytics,您可能需要:script-src 'self' https://www.googletagmanager.com https://www.google-analytics.com。还需要将其域名添加到connect-src用于API调用,以及img-src用于跟踪像素。
CSP可以替代其他安全头吗?
不能,CSP是对其他安全头的补充。您还应该使用:X-Content-Type-Options: nosniff、X-Frame-Options(虽然CSP中的frame-ancestors可以替代它)、X-XSS-Protection、Strict-Transport-Security(HSTS)和Referrer-Policy。每个头都处理不同的安全问题。