在 ‌Nginx + Laravel‌ 环境中配置 ‌CSP (Content Security Policy)‌ 安全头

以下是在 Nginx + Laravel 环境中配置 CSP (Content Security Policy) 安全头的完整指南,涵盖动态生成 Nonce、报告模式、以及常见框架兼容性处理:


1. CSP 核心概念

CSP 通过白名单控制允许加载的资源(JS/CSS/图片等),防止 XSS 和数据注入攻击。
关键指令

  • default-src:默认资源类型限制
  • script-src:控制 JavaScript 来源
  • style-src:控制 CSS 来源
  • report-uri:违规报告地址(可选)

2. 基础 Nginx 配置

在 Nginx 的 SSL 配置块(/etc/nginx/sites-available/laravel.conf)中添加:

server {
    listen 443 ssl;
    # ... 其他 SSL 配置 ...

    # 基础 CSP 策略(示例)
    add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' https://cdn.jsdelivr.net; style-src 'self' 'unsafe-inline'; img-src 'self' data:; font-src 'self'; connect-src 'self'; frame-ancestors 'none'; form-action 'self'; base-uri 'self';";

    # 可选:启用 CSP 报告模式(不强制拦截,仅记录)
    # add_header Content-Security-Policy-Report-Only "default-src 'self'; report-uri /csp-violation-report-endpoint";
}

3. Laravel 动态生成 Nonce(关键安全实践)

3.1 创建中间件
php artisan make:middleware ApplyCspHeaders

编辑 app/Http/Middleware/ApplyCspHeaders.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Str;

class ApplyCspHeaders
{
   
   
    public function handle($request, Closure $next)
    {
   
   
        $response = $next(
### 正确配置HTTP响应中的Content-Security-Policy以修复安全漏洞 为了确保网站的安全性,防止跨站脚本攻击(XSS)和其他潜在威胁,正确配置 `Content-Security-Policy`(CSP)响应至关重要。以下是一个详细的配置方法和注意事项: #### 配置示例 在 Nginx 中可以通过 `add_header` 指令为 HTTP 响应添加 CSP 信息。以下是几种常见的配置方式: 1. **基本配置**: ```nginx add_header Content-Security-Policy "default-src 'self';"; ``` 这是最简单的配置,表示所有资源只能从当前域名加载[^1]。 2. **增强安全配置**: ```nginx add_header Content-Security-Policy "default-src 'self' localhost:8080 'unsafe-inline' 'unsafe-eval' blob: data: ;"; ``` 该配置允许从当前域名、`localhost:8080` 加载资源,并支持内联脚本和评估脚本,同时允许使用 Blob 和 Data URL[^1]。 3. **全面配置**: ```nginx add_header Content-Security-Policy "default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; img-src * data:; worker-src * blob:; font-src 'self' data:;"; ``` 该配置更灵活,允许从任意源加载资源,但对样式、脚本、图片等进行了更细致的控制[^2]。 4. **升级不安全请求**: 如果需要将 HTTP 请求自动升级为 HTTPS 请求,可以使用以下配置: ```nginx add_header Content-Security-Policy "upgrade-insecure-requests; connect-src *;"; ``` 注意,这种配置可能会导致无法加载不支持 HTTPS 的资源[^2]。 #### 配置注意事项 - **默认源限制**:`default-src` 是最重要的指令之一,定义了所有资源的默认加载策略。如果未明确指定其他指令(如 `script-src`),它们将继承 `default-src` 的值。 - **内联脚本与评估脚本**:虽然 `'unsafe-inline'` 和 `'unsafe-eval'` 提高了灵活性,但也增加了 XSS 攻击的风险。建议仅在必要时使用[^3]。 - **测试环境与生产环境**:在测试环境中可以适当放宽限制,但在生产环境中必须严格控制资源加载来源[^2]。 - **浏览器兼容性**:不同的浏览器对 CSP 的支持可能略有差异,建议测试多种主流浏览器以确保兼容性。 #### 示例代码 以下是一个完整的 Nginx 配置示例: ```nginx server { listen 80; server_name example.com; location / { add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;"; # 其他配置... } } ``` ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值