HTTP头注入攻击通过篡改响应头中的恶意脚本或数据,实现跨站脚本(XSS)等攻击。Content-Security-Policy(CSP)作为现代Web安全机制,可有效限制资源加载来源,防御此类威胁。以下介绍在Linux服务器端实现CSP的策略。
一、CSP核心机制解析****
CSP通过HTTP响应头Content-Security-Policy,指定浏览器允许加载的资源域名、脚本类型等规则。例如,规则default-src 'self'仅允许加载同源资源,而script-src 'self' trusted.cdn.com则允许特定CDN的脚本。
二、Nginx服务器端配置实现****
1. 基础规则配置
在Nginx配置文件中,通过add_header指令添加CSP头。例如,针对静态网站:
2.
nginx
3.
4.
| server { | |
|---|---|
| listen 80; | |
| server_name example.com; | |
| add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:"; | |
| } |
5.
1. default-src 'self':默认仅允许同源资源。
2. 'unsafe-inline':允许内联脚本和样式(需谨慎使用,生产环境建议移除)。
3. img-src:允许同源图片及Base64编码数据。
6. 动态规则升级
针对动态网站,可通过Nginx变量动态生成CSP。例如,结合$host变量限制特定域名:
7.
nginx
8.
9.
| map csp_policy { | |
|---|---|
| default "default-src 'self'; script-src 'self' api.example.com"; | |
| api.example.com "default-src 'self'; script-src 'self' 'unsafe-eval'"; | |
| } | |
| server { | |
| add_header Content-Security-Policy "$csp_policy"; | |
| } |
10.
三、Apache服务器端配置实现****
在Apache中,通过Header指令配置CSP。例如:
apache
| <VirtualHost *:80> | |
|---|---|
| ServerName example.com | |
| Header always set Content-Security-Policy "default-src 'self'; frame-ancestors 'none'" | |
· frame-ancestors 'none':禁止页面被嵌入iframe,防御点击劫持。
四、高级防护策略****
1.
非严格模式过渡
使用Content-Security-Policy-Report-Only头进行测试,避免直接阻断功能:
2.
3.
nginx
4.
5.
| add_header Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-report"; |
|---|
6.
通过/csp-report端点收集违规日志,逐步调整策略。
7.
8.
哈希与随机数
对内联脚本使用sha256-哈希或nonce随机数,例如:
9.
10.
nginx
11.
12.
| add_header Content-Security-Policy "script-src 'self' 'sha256-abc123...' 'nonce-rAnd0m123'"; |
|---|
13.
五、监控与优化****
· 日志分析:通过Nginx的access_log或Apache的mod_security日志,监控CSP违规事件。
· 性能权衡:避免过度严格的规则导致功能异常,需结合业务需求动态调整。
通过CSP的服务器端实现,Linux Web服务可显著降低HTTP头注入和XSS攻击风险,实现安全与功能的平衡。