通用响应头
适用于请求和响应的通用元数据
Date
服务器生成响应的时间
Server
服务器软件的信息(如 nginx/1.23.3),如非必要移除Server头
安全相关响应头
增强安全性,防御攻击
Content-Security-Policy (CSP)
作用: 防止 XSS、数据注入等攻击,控制资源加载来源。
示例:
add_header Content-Security-Policy "
default-src 'self';
font-src 'self' http://at.alicdn.com data:;
script-src 'self' https://api.tianditu.gov.cn http://api.tianditu.gov.cn 'unsafe-eval' 'unsafe-inline';
style-src 'self' https://api.tianditu.gov.cn http://api.tianditu.gov.cn 'unsafe-eval' 'unsafe-inline';
img-src * data:;
connect-src 'self' https://api.tianditu.gov.cn http://api.tianditu.gov.cn;
object-src 'none';
frame-ancestors 'self';
base-uri 'self';
form-action 'self';
";
指令:
default-src:作为其他资源类型指令的默认值。若未为特定资源类型单独指定策略,就采用default-src的策略。script-src:控制 JavaScript 脚本的加载和执行来源。style-src:控制 CSS 样式表的加载和执行来源。img-src:控制图片资源的加载来源。connect-src:控制通过XMLHttpRequest、fetch、WebSocket等 API 发起的连接请求的目标来源。font-src:控制字体资源的加载来源。object-src:控制<object>、<embed>和<applet>等标签加载的插件资源的来源。media-src:控制<audio>和<video>等媒体资源的加载来源。frame-src:控制<frame>和<iframe>标签加载的页面来源。<font style="color:rgb(34, 34, 34);">base-uri</font>:限制<base>标签中指定的基础 URI,该基础 URI 会影响页面中所有相对 URI 的解析。form-action:限制<form>表单提交的目标 URI。frame-ancestors:控制当前页面可以被哪些页面嵌入到<frame>、<iframe>、<object>、<embed>或<applet>中。worker-src:控制 Web Worker 和 Shared Worker 的加载来源。manifest-src:控制 Web App Manifest 文件的加载来源。report-uri:指定一个 URI,当发生 CSP 违规时,浏览器会向该 URI 发送一份违规报告。report-to:与report-uri类似,用于指定 CSP 违规报告的接收端点,但使用Reporting API规范。
参数:
self:表示当前源,即当前网页所在的域名和协议。'none':表示禁止加载任何资源。'unsafe-inline':允许使用内联代码,如内联脚本和内联样式。但使用该关键字会带来安全风险,因为攻击者可能会利用 XSS 漏洞注入恶意的内联代码。'unsafe-eval':允许使用eval()或类似的动态代码执行方法。使用该关键字也存在安全风险,因为攻击者可能会利用它执行恶意脚本。'nonce-<base64-value>':nonce是一个一次性的随机值,用于允许特定的内联脚本或样式执行。服务器会为每个请求生成一个新的nonce值,并将其添加到 CSP 策略和 HTML 标签中。(太复杂,一般不需要配置)
add_header Content-Security-Policy "script-src 'self' 'nonce-123456';";
<script nonce="123456">console.log('这是一个带有 nonce 的内联脚本');</script>
'sha256-<base64-value>'、'sha384-<base64-value>'、'sha512-<base64-value>':这些是哈希值,用于允许特定的内联脚本或样式执行。通过计算内联代码的哈希值,并将其添加到 CSP 策略中,只有哈希值匹配的代码才能执行。(太复杂,一般不需要配置)
# 对代码部分计算哈希
echo -n "console.log('这是一个内联脚本');" | openssl dgst -sha256 -binary | openssl enc -base64
# 把计算得到的哈希值放到 sha256- 后面
add_header Content-Security-Policy "script-src 'self' 'sha256-计算得到的哈希值';";
<script>console.log('这是一个内联脚本');</script>
https://api.tianditu.gov.cn:具体域名,允许从指定的域名加载资源。可以指定协议、端口等信息。- 通配符
*:表示允许从任何来源加载资源。使用该通配符会降低安全性,应谨慎使用。 data::允许使用data:URI 来加载资源,如内联图片、字体等。blob::允许使用blob:URI 来加载资源,通常用于处理二进制大对象。filesystem:允许使用filesystem:URI 来加载资源,用于访问文件系统。
X-Content-Type-Options
作用: 它的主要作用是防止浏览器自动猜测内容类型,从而避免潜在的安全风险(如 XSS 攻击)
示例:
add_header X-Content-Type-Options nosniff;
参数:
nosniff:最常用的值,表示禁止浏览器进行 MIME 嗅探。如果服务器返回Content-Type: text/plain,浏览器会严格按纯文本处理,不会尝试渲染为 HTML 或执行脚本。- 空值(或未设置):浏览器会默认开启 MIME 嗅探,可能导致安全风险。
兼容性:
- 现代浏览器:Chrome、Firefox、Edge、Safari 等均支持
nosniff。 - 旧版本浏览器:IE8+ 支持,更早版本可能不支持。
注:
- 如果服务器返回的 MIME 类型与实际内容不匹配,可能导致页面无法正确渲染(例如,图片被误判为文本)。需确保
Content-Type头设置正确。 - 若需允许某些场景的嗅探(如上传文件的预览),需谨慎权衡安全风险。
Strict-Transport-Security (HSTS)
作用: 用于强制浏览器和客户端仅通过 HTTPS 协议与服务器通信,从而防止中间人攻击(MITM)和降级攻击。它通过指示浏览器记住网站的 HTTPS 配置,减少对 HTTP 的依赖。
示例:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";
参数:
max-age:指定 HSTS 策略的有效期(单位:秒)。includeSubDomains:将 HSTS 策略应用于所有子域名(如example.com和blog.example.com)。preload:将域名加入浏览器的预加载列表,使策略在用户首次访问前生效。
兼容性:
- 现代浏览器:Chrome、Firefox、Edge、Safari 等均支持 HSTS。
- 旧版本浏览器:IE10+ 支持,更早版本可能不支持。
注:
- 证书问题:确保 HTTPS 证书有效(非自签名、未过期),否则浏览器会拒绝访问
- 回退风险:若
max-age设置过长且配置错误,可能导致网站无法访问,需通过清除浏览器缓存或等待过期解决。 - 预加载限制:加入预加载列表后,策略无法撤销,需谨慎操作。
- 混合内容:确保页面资源(如图片、脚本)均通过 HTTPS 加载,避免浏览器忽略 HSTS。
X-Frame-Options
作用: 用于控制网页是否允许被嵌入到 iframe、frame 或 object 中,从而防止点击劫持(Clickjacking)攻击。它通过限制网页的嵌入行为,保护用户交互安全。
示例:
add_header X-Frame-Options "SAMEORIGIN";
参数:
DENY:禁止任何来源嵌入当前页面,无论是否同源。SAMEORIGIN:仅允许与当前页面同源的网站嵌入(如https://example.com嵌入https://example.com/page)。ALLOW-FROM uri:指定允许嵌入的具体 URI(如https://trusted.example.com)。
兼容性:
- 现代浏览器:Chrome、Firefox、Edge、Safari 等均支持
DENY和SAMEORIGIN。 - 旧版本浏览器:IE8+ 支持,更早版本可能不支持。
注:
ALLOW-FROM的弃用:由于安全性不足且浏览器兼容性下降,应优先使用 CSP 的frame-src。- 与 CORS 的关系:若需嵌入第三方内容,需同时配置 CORS 头(如
Access-Control-Allow-Origin),否则浏览器可能拒绝加载。 - 嵌套框架的限制:若页面被嵌套在多个框架中,最内层的
X-Frame-Options可能覆盖外层设置,需统一配置。
缓存控制响应头
优化资源缓存策略。
Cache-Control
设置缓存规则(如 max-age=3600)。
Expires
指定资源过期时间(HTTP/1.0 标准)。
内容协商响应头
描述内容属性。
Content-Type
MIME 类型(如 text/html)。
Content-Language
内容语言(如 zh-CN)。
重定向与状态响应头
控制请求流程。
Location
配合 301/302/307 重定向。
Refresh
自动刷新或跳转(如 Refresh: 5; url=https://example.com)。
Cookie 相关响应头
管理客户端 Cookie。
Set-Cookie
设置 Cookie(如 sessionid=abc123)。
Cookie-Secure
标记 Cookie 仅 HTTPS 传输。
实体响应头
描述响应体属性。
Content-Length
响应体字节长度。
Content-Encoding
压缩算法(如 gzip)。
其他响应头
Connection
控制持久连接(如 keep-alive)。
Vary
指示缓存根据请求头变化(如 Vary: User-Agent)。
安全配置建议
- 始终启用CSP、HSTS 和
X-Content-Type-Options - 最小化暴露,移除敏感头或模糊值