HTTP头注入防御:Content-Security-Policy的Linux服务器端实现

210 阅读2分钟

huake_00219_.jpgHTTP头注入攻击通过篡改响应头中的恶意脚本或数据,实现跨站脚本(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 hosthost 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攻击风险,实现安全与功能的平衡。