【什么是CSP】CSP(Content Security Policy,内容安全策略)是一种用于增强网页安全性的HTTP响应头。它通过定义网站可以加载哪些资源(如脚本、样式表、图片、字体等),来防止跨站脚本攻击(XSS)、数据注入等安全威胁。CSP的核心思想是“白名单”机制,即只允许特定来源的资源被加载和执行。
CSP是一种由W3C标准定义的安全机制,主要用于防范恶意代码在网页中运行。它通过设置HTTP响应头`Content-Security-Policy`来限制网页中可加载的内容来源。CSP可以有效防止XSS攻击,提高网站的安全性。开发者可以通过配置不同的指令来控制不同类型的资源加载,例如脚本、样式、图像、框架等。CSP支持多种源(如`'self'`、`'none'`、具体域名等),并提供报告功能以帮助监控和调试策略。
CSP主要指令与说明(表格形式)
指令名称 | 说明 | 示例 |
`default-src` | 默认策略,用于未明确指定的资源类型 | `default-src 'self'` |
`script-src` | 定义允许加载的脚本来源 | `script-src 'self' https://example.com` |
`style-src` | 定义允许加载的样式表来源 | `style-src 'self' 'unsafe-inline'` |
`img-src` | 定义允许加载的图片来源 | `img-src 'self' data:` |
`connect-src` | 定义允许发起网络请求的源(如AJAX、WebSocket等) | `connect-src 'self' https://api.example.com` |
`font-src` | 定义允许加载的字体来源 | `font-src 'self' https://fonts.example.com` |
`frame-src` | 定义允许嵌入的框架来源 | `frame-src 'none'` |
`object-src` | 定义允许加载的插件(如Flash)来源 | `object-src 'none'` |
`base-uri` | 定义页面中` | `base-uri 'self'` |
`report-uri` | 指定当CSP策略被违反时,将违规信息发送到的URL | `report-uri /csp-report-endpoint` |
`nonce- | 使用一次性随机数来允许特定脚本或样式执行 | `script-src 'nonce-1234567890'` |
`'strict-dynamic'` | 允许动态加载的脚本(如通过`eval()`或`new Function()`) | `script-src 'strict-dynamic'` |
总结:
CSP是一个强大的安全工具,能够有效减少网页中的安全漏洞。通过合理配置CSP策略,开发者可以更好地控制网页中资源的加载行为,从而提升整体安全性。虽然CSP的配置可能较为复杂,但随着现代浏览器的支持日益广泛,越来越多的网站开始采用这一机制来保护用户免受恶意内容的侵害。