Http Security Headers

news/2025/10/11 13:49:02/文章来源:https://www.cnblogs.com/lucidar/p/19134874

HTTP 安全相关的响应头(Security Headers)是 Web 应用安全防护的核心手段,通过浏览器与服务器的协作,防御跨站脚本(XSS)、点击劫持、中间人攻击、信息泄露等常见风险。以下是最常用的安全头及其作用机制使用方法适用场景的详细说明:

一、Strict-Transport-Security(HSTS)

作用机制

强制浏览器仅通过 HTTPS 协议与服务器通信,拒绝使用 HTTP 协议,彻底阻断“HTTP 降级攻击”“SSL 剥离攻击”等中间人攻击。

  • 浏览器首次通过 HTTPS 接收该头后,会将域名加入本地缓存,在 max-age 有效期内,所有对该域名的请求会自动转为 HTTPS(即使输入 http:// 或点击 HTTP 链接)。

使用方法

格式:Strict-Transport-Security: max-age=<秒数>; [includeSubDomains]; [preload]

  • max-age:必填,缓存有效期(秒),推荐 31536000(1 年)。
  • includeSubDomains:可选,将规则应用到所有子域名(如 blog.example.com)。
  • preload:可选,声明希望加入浏览器 HSTS 预加载列表(需申请,解决首次访问风险)。

示例(Nginx 配置):

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;

适用场景

  • 所有已部署 HTTPS 的网站(必须先确保 HTTPS 配置正确,否则会导致网站无法访问)。
  • 尤其适合金融、电商等对传输安全要求高的场景,防止用户因输入 HTTP 地址或点击 HTTP 链接导致的安全风险。

二、Content-Security-Policy(CSP)

作用机制

通过白名单机制精确控制浏览器可加载的资源(脚本、样式、图片等)和执行的代码,从根本上防御 XSS、代码注入等攻击。

  • 浏览器仅允许加载/执行 CSP 指令明确授权的资源(如 script-src 'self' 仅允许同源脚本),未授权的资源会被拦截。

使用方法

格式:Content-Security-Policy: 指令1 来源1 来源2; 指令2 来源3; ...
核心指令:

  • default-src:所有资源的默认来源(未单独指定时继承)。
  • script-src:控制 JavaScript 来源(防御 XSS 的核心)。
  • style-src:控制 CSS 来源。
  • img-src:控制图片来源。
  • frame-ancestors:控制哪些域名可通过 iframe 嵌套当前页面(替代 X-Frame-Options)。

示例(严格限制脚本和框架):

add_header Content-Security-Policy "default-src 'self'; script-src 'self' https://trusted-cdn.com; frame-ancestors 'self';" always;

仅报告模式(不拦截资源,仅发送违规报告):

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

适用场景

  • 所有网站,尤其是用户输入频繁的场景(如评论、表单),防御 XSS 攻击。
  • 需要限制第三方资源加载的场景(如仅允许指定 CDN 的脚本)。
  • 替代 X-Frame-OptionsX-XSS-Protection,提供更细粒度的控制。

三、X-Content-Type-Options

作用机制

阻止浏览器对资源进行MIME 类型嗅探,强制浏览器严格遵守服务器返回的 Content-Type 头,避免因 MIME 类型混淆导致的 XSS 攻击。

  • 例如:服务器声明 Content-Type: text/plain 的文件,即使内容是 <script> 代码,浏览器也会当作纯文本显示,不会执行。

使用方法

唯一有效值:X-Content-Type-Options: nosniff

示例(Nginx 配置):

add_header X-Content-Type-Options "nosniff" always;

适用场景

  • 所有网站,尤其是允许用户上传文件的场景(如用户上传 .txt 文件伪装成脚本)。
  • 静态资源服务器(如 CDN),防止攻击者替换资源内容后通过 MIME 嗅探执行恶意代码。

四、X-Frame-Options

作用机制

限制当前页面是否允许被其他页面通过 <iframe><frame> 等标签嵌套,防御点击劫持攻击(攻击者通过透明 iframe 诱导用户点击敏感操作)。

使用方法

取值:

  • DENY:禁止任何网站嵌套当前页面(包括自身域名)。
  • SAMEORIGIN:仅允许同源(协议+域名+端口相同)页面嵌套。
  • ALLOW-FROM <uri>:仅允许指定域名嵌套(现代浏览器已不支持,推荐用 CSP 的 frame-ancestors 替代)。

示例(禁止任何嵌套):

add_header X-Frame-Options "DENY" always;

适用场景

  • 敏感操作页面(如登录、支付、删除数据):用 DENY 完全禁止嵌套。
  • 需在自身域名内嵌套的页面(如后台管理系统的子页面):用 SAMEORIGIN

五、X-XSS-Protection

作用机制

控制浏览器内置的XSS 过滤器行为,检测并拦截可能的 XSS 攻击代码(仅在旧版浏览器生效,现代浏览器已逐渐弃用)。

使用方法

取值:

  • 0:禁用过滤器(不推荐)。
  • 1:启用过滤器,检测到攻击时尝试移除恶意代码(可能导致页面异常)。
  • 1; mode=block:启用过滤器,检测到攻击时完全阻止页面加载(更安全)。

示例:

add_header X-XSS-Protection "1; mode=block" always;

适用场景

  • 需兼容旧版浏览器(如 IE 8-11、Chrome 77 及以下)的网站。
  • 作为 CSP 的补充防护(现代浏览器优先遵循 CSP,忽略此头)。

六、Referrer-Policy

作用机制

控制页面跳转时,浏览器发送的 Referrer 头(包含来源页面 URL)的内容,保护用户隐私和网站信息不被泄露。

使用方法

常见取值:

  • no-referrer:不发送任何 Referrer
  • no-referrer-when-downgrade:默认值,从 HTTPS 跳转到 HTTP 时不发送,其他情况发送完整 URL。
  • same-origin:仅在同源跳转时发送 Referrer,跨域时不发送。
  • strict-origin:跨域跳转时仅发送协议+域名+端口(如 https://example.com),不包含路径。

示例(跨域时仅发送域名):

add_header Referrer-Policy "strict-origin" always;

适用场景

  • 隐私敏感网站(如医疗、金融),防止用户访问路径泄露。
  • 不希望第三方网站知道用户来源页面的场景(如内部系统跳转至外部网站)。

七、Permissions-Policy(原 Feature-Policy)

作用机制

限制浏览器对敏感特性(如摄像头、麦克风、地理位置、全屏等)的访问权限,防止第三方脚本滥用这些功能。

使用方法

格式:Permissions-Policy: 特性1=(来源1, 来源2); 特性2=(来源3); ...
常见特性:camera(摄像头)、microphone(麦克风)、geolocation(地理位置)、fullscreen(全屏)。

示例(仅允许同源脚本使用摄像头和麦克风):

add_header Permissions-Policy "camera=('self'); microphone=('self')" always;

禁止所有网站使用某个特性:

add_header Permissions-Policy "geolocation=()" always; # 禁用地理位置

适用场景

  • 不需要使用敏感特性的网站(如纯展示类网站):禁用所有不必要的特性。
  • 需限制第三方脚本权限的场景(如仅允许自身脚本使用摄像头,禁止广告脚本使用)。

八、Access-Control-Allow-*(CORS 相关头)

作用机制

跨域资源共享(CORS)相关头用于控制跨域请求的权限,允许或拒绝不同源的网站访问当前服务器的资源,同时规范跨域请求中凭据(如 Cookie)的传递。

核心头及使用方法

  1. Access-Control-Allow-Origin:指定允许跨域请求的来源(如 https://client.com* 表示允许所有,但若带凭据则不能用 *)。
  2. Access-Control-Allow-Methods:允许的 HTTP 方法(如 GET, POST, PUT)。
  3. Access-Control-Allow-Headers:允许的自定义请求头(如 Authorization)。
  4. Access-Control-Allow-Credentials:是否允许跨域请求携带凭据(true/false,需与客户端 withCredentials 配合)。

示例(允许 https://client.com 跨域请求并携带凭据):

location /api {add_header Access-Control-Allow-Origin "https://client.com" always;add_header Access-Control-Allow-Methods "GET, POST" always;add_header Access-Control-Allow-Credentials "true" always;if ($request_method = OPTIONS) {return 204; # 处理预检请求}
}

适用场景

  • 提供跨域 API 的服务器(如前后端分离架构中,前端域名与 API 域名不同)。
  • 需要跨域传递身份信息(如 Cookie)的场景(如单点登录 SSO)。

九、Set-Cookie(安全属性)

作用机制

通过 Set-Cookie 头设置 Cookie 时,附加安全属性限制 Cookie 的使用范围和方式,防止 Cookie 被窃取或滥用(如 XSS 劫持、CSRF 攻击)。

核心安全属性

  • HttpOnly:禁止 JavaScript 访问 Cookie(防御 XSS 窃取 Cookie)。
  • Secure:仅允许通过 HTTPS 传输 Cookie(防止 HTTP 传输时被拦截)。
  • SameSite:限制跨站请求携带 Cookie(防御 CSRF),取值:
    • Strict:完全禁止跨站请求携带。
    • Lax:仅允许导航类跨站请求携带(如 <a> 标签跳转)。
    • None:允许跨站携带(需配合 Secure)。
  • Max-Age/Expires:设置 Cookie 有效期,避免永久有效带来的风险。

示例(安全的 Session Cookie):

add_header Set-Cookie "sessionid=abc123; HttpOnly; Secure; SameSite=Lax; Max-Age=86400" always;

适用场景

  • 所有包含敏感信息的 Cookie(如登录 Session ID、认证 Token)。
  • 尤其需要防御 XSS 和 CSRF 的场景(如用户中心、支付系统)。

总结:安全头的最佳实践

  1. 多层防护:结合使用多个安全头(如 CSP + HSTS + X-Content-Type-Options),覆盖不同风险场景。
  2. 最小权限:遵循“最小必要”原则(如 CSP 仅允许必要的资源来源,Permissions-Policy 禁用不必要的特性)。
  3. 兼容性与监控:用 Report-Only 模式测试 CSP 等规则,通过报告机制监控违规行为。
  4. 优先现代方案:用 CSP 替代 X-Frame-OptionsX-XSS-Protection,用 SameSite 属性增强 Cookie 安全。

合理配置这些安全头,可大幅降低 Web 应用的安全风险,是构建安全系统的基础措施。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

参照Yalla、Hawa等主流APP核心功能,开发一款受欢迎的海外语聊需要从哪些方面入手

近期,从海外客户的主要咨询需求来看,主要是围绕在借鉴主流APP,在此基础上需要开发属于他们Agency、Coinseller、CP、PK等特色功能。每个客户的需求都有差异,建议您从自己的运营方向出发,来开发符合自己需求的海外…

本土化DevOps的突围之路:Gitee如何重塑企业研发效能

本土化DevOps的突围之路:Gitee如何重塑企业研发效能 在数字经济加速发展的今天,DevOps已从技术概念升级为企业数字化转型的核心引擎。国际权威调研机构Gartner预测,到2025年全球DevOps市场规模将突破300亿美元,其中…

【STM32计划开源】基于STM32的智能点滴输液系统

【STM32计划开源】基于STM32的智能点滴输液系统pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

溶气气浮/浅层气浮/国内知名气浮机靠谱厂家品牌推荐

溶气气浮/浅层气浮/国内知名气浮机靠谱厂家品牌推荐 无锡工源环境科技股份有限公司是一家在环保水处理设备领域,特别是气浮设备研发与制造方面,具有深厚技术积累和市场声誉的高新技术企业。公司始终专注于水处理技术…

iOS 26 崩溃日志深度指南,如何收集、符号化、定位与监控 - 实践

iOS 26 崩溃日志深度指南,如何收集、符号化、定位与监控 - 实践2025-10-11 13:35 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !imp…

鸿蒙Next密码自动填充服务:安全与便捷的完美融合 - 实践

鸿蒙Next密码自动填充服务:安全与便捷的完美融合 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas…

覆盖动画 / 工业 / 科研!Rhino 7:专业 3D 建模的全能解决方案,新手也能上手

在 3D 建模领域,一款功能强大、兼容广泛且高效稳定的工具,往往能成为设计师、工程师突破创作瓶颈的关键。由美国 Robert McNeel 公司打造的Rhinoceros(简称 Rhino) 系列软件,凭借其 “集百家之长” 的设计理念,早…

2020CSP-J2比赛记录题解

题目请看洛谷备注:这次比赛我是没打的T1 先把数转成二进制,逐位计算,并判断是否可完整正确拆分贴一下代码 #include <bits/stdc++.h> using namespace std; #define fre(c) freopen(c".in","r…

Binder.getCallingPid()和Binder.getCallingUid()漏洞分析

最近在学习安卓漏挖,在分析ghera数据集时发现一个很有意思的binder特性,但还没搞懂底层原理,先挖个坑 漏洞分析EnforceCallingOrSelfPermission-PrivilegeEscalation-Lean以下代码使用Binder.getCallingPid()和Bind…

详细介绍:golang基础语法(五)切片

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

让博客园设置支持PlantUml画图

1. 引入 2. 博客园不支持plantuml渲染 3. 编写js脚本支持plantuml 4. 缺点‍ 1. 引入众所周知,我们在写博客的时候,常使用PlantUML 和 Mermaid绘制图表、流程图、架构图。这是因为用代码去画图,不怎么需要手动控制格…

jj

jjimport numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.preprocessing import StandardScaler from sklearn.decomposition import PCA from sklearn.cluste…

光谱相机的未来趋势 - 详解

光谱相机的未来趋势 - 详解pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", …

Hall定理学习笔记

内容 设二分图左部点点数为 \(x\),右部点点数为 \(y\),且满足 \(x<y\)。定义一张二分图的完备匹配为:对于任意一个左部点都有与之匹配的右部点。 \(\text{Hall}\) 定理的内容是:一张二分图有完备匹配,等价于对…

面向对象抽象,接口多态综合-动物模拟系统

1、抽象一个动物类,会说话和走路。 public abstract class Animal() { public abstract void Speak(); public abstract void Walk(); } 2、抽象出能力,有的动物会飞,有的动物能用四条腿走路 interface IFly { void…

实用指南:APache shiro-550 CVE-2016-4437复现

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Spark - deprecated registerTempTable() function

Spark - deprecated registerTempTable() functionIn Apache Spark, the function registerTempTable() was an old API (deprecated since Spark 2.0 and removed in Spark 3.0) that allowed you to register a Data…

MinGW-即时入门-全-

MinGW 即时入门(全)原文:zh.annas-archive.org/md5/a899d9a6a04025b2abd50163c83cff2a 译者:飞龙 协议:CC BY-NC-SA 4.0第一章. 立即开始使用 MinGW 欢迎使用 立即开始使用 MinGW。 本书特别创建,旨在为您提供所…

个人微信开发文档

个人微信开发文档、微信个人号api开发、微信机器人API 微信机器人是一种基于微信平台的自动化程序,能够根据用户的输入自动回复信息。它可以用于客服、信息查询、娱乐等多个场景。通过程序化的方式,微信机器人可以在…

Splay学习笔记

问题分析: (来源:洛谷P3369【模板】普通平衡树) 您需要动态地维护一个可重集合 \(M\),并且提供以下操作:向 \(M\) 中插入一个数 \(x\)。 从 \(M\) 中删除一个数 \(x\)(若有多个相同的数,应只删除一个)。 查询…