HTTP头注入攻击通过篡改响应头中的恶意脚本或数据,实现跨站脚本(XSS)等攻击。Content-Security-Policy(CSP)作为现代Web安全机制,可有效限制资源加载来源,防御此类威胁。以下介绍在Linux服务器端实现CSP的策略。

一、CSP核心机制解析

CSP通过HTTP响应头Content-Security-Policy,指定浏览器允许加载的资源域名、脚本类型等规则。例如,规则default-src 'self'仅允许加载同源资源,而script-src 'self' https://trusted.cdn.com则允许特定CDN的脚本。

二、Nginx服务器端配置实现

  1. 基础规则配置
    在Nginx配置文件中,通过add_header指令添加CSP头。例如,针对静态网站:

nginx

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:";

}

    1. default-src 'self':默认仅允许同源资源。
    2. 'unsafe-inline':允许内联脚本和样式(需谨慎使用,生产环境建议移除)。
    3. img-src:允许同源图片及Base64编码数据。
  1. 动态规则升级
    针对动态网站,可通过Nginx变量动态生成CSP。例如,结合$host变量限制特定域名:

nginx

map $host $csp_policy {

default "default-src 'self'; script-src 'self' https://api.example.com";

api.example.com "default-src 'self'; script-src 'self' 'unsafe-eval'";

}

server {

add_header Content-Security-Policy "$csp_policy";

}

三、Apache服务器端配置实现

在Apache中,通过Header指令配置CSP。例如:

apache

<VirtualHost *:80>

ServerName example.com

Header always set Content-Security-Policy "default-src 'self'; frame-ancestors 'none'"

</VirtualHost>

  • frame-ancestors 'none':禁止页面被嵌入iframe,防御点击劫持。

四、高级防护策略

非严格模式过渡
使用Content-Security-Policy-Report-Only头进行测试,避免直接阻断功能:

nginx

add_header Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-report";

通过/csp-report端点收集违规日志,逐步调整策略。

哈希与随机数
对内联脚本使用sha256-哈希或nonce随机数,例如:

nginx

add_header Content-Security-Policy "script-src 'self' 'sha256-abc123...' 'nonce-rAnd0m123'";

五、监控与优化

  • 日志分析:通过Nginx的access_log或Apache的mod_security日志,监控CSP违规事件。
  • 性能权衡:避免过度严格的规则导致功能异常,需结合业务需求动态调整。

通过CSP的服务器端实现,Linux Web服务可显著降低HTTP头注入和XSS攻击风险,实现安全与功能的平衡。

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐