以下是在 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(

最低0.47元/天 解锁文章
273

被折叠的 条评论
为什么被折叠?



