Web 应用中配置 HTTP 安全响应头是提升网站安全性的重要一步。合理配置 Nginx 的安全头,可以抵御常见的安全威胁(如 XSS、点击劫持、MIME 类型嗅探等),增强用户隐私保护和传输安全性。
常见的 HTTP 安全头及其作用
1. Content-Security-Policy (CSP)
作用:限制资源(如脚本、样式、图片等)的加载来源,防止 XSS 和数据注入攻击。
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self'; img-src 'self' data:; object-src 'none'; frame-ancestors 'none';worker-src blob:;";
配置说明:
- `default-src ‘self’:限制所有资源的默认加载来源为当前域。
script-src 'self'
:仅允许加载来自当前域的脚本。style-src 'self
:限制样式来源为当前域。img-src 'self' data:
:允许图片来自当前域和data:
URI。object-src 'none'
:禁止加载<object>
、<embed>
,防止插件攻击。frame-ancestors 'none'
:禁止页面被嵌套到其他站点的iframe
中。worker-src blob:
:允许 Web Worker 资源来源为blob:
。
注意事项:
-
如果需要加载第三方资源(如 CDN),需显式添加来源。
script-src ‘self’ https://cdn.jsdelivr.net;
-
避免使用
'unsafe-inline'
和'unsafe-eval'
,减少 XSS 风险。 -
使用
nonce
或hash
机制允许特定的内联脚本:add_header Content-Security-Policy “script-src ‘self’ ‘nonce-random123’;”;
2. Strict-Transport-Security (HSTS)
作用:强制浏览器通过 HTTPS 访问网站,防止中间人攻击。
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
配置说明:
max-age=63072000
:HSTS 有效期(以秒为单位),这里是 2 年。includeSubDomains
:对子域名启用 HSTS。preload
:允许网站加入 HSTS 预加载列表。
3. X-Frame-Options
作用:防止页面被嵌套到其他站点的 iframe
中,防止点击劫持攻击。
add_header X-Frame-Options SAMEORIGIN alwa