CWE

常见的弱点枚举

一个由社区开发的软件&硬件缺陷类型的列表

2021 CWE最重要的硬件的弱点
CWE最危险的弱点
>CWE列表> CWE -个人字典定义(4.10)
ID

cwe - 200:暴露敏感信息的未经授权的演员

弱点ID: 200
抽象:
结构:简单的
视图定制的信息:
+描述
产品暴露敏感信息的一个演员,没有明确被授权可以访问这些信息。
+扩展描述

有许多不同类型的错误,介绍信息曝光。错误的严重程度范围广泛,可以根据产品的上下文操作,透露敏感信息的类型,以及它可能提供给攻击者的利益。某些敏感信息包括:

  • 私人的,个人信息,个人信息,如财务数据,健康记录,地理位置,或联系细节
  • 系统状态和环境,如操作系统和安装包
  • 商业秘密和知识产权
  • 网络状态和配置
  • 产品的代码或内部状态
  • 元数据,比如日志或消息头的连接
  • 间接信息,比如两个内部操作之间的差异,可以观察到一个局外人

对不同党派信息可能是敏感,每一种都可能有自己的预期是否应该受到保护的信息。这些政党包括:

  • 产品的用户
  • 人或组织的信息创建或使用的产品,即使他们不是直接产品用户
  • 产品的管理,包括系统的管理员(s)和/或网络产品的经营
  • 开发人员

信息曝光可以发生在不同的方式:

  • 的代码显式地插入敏感信息资源或消息有意访问未经授权的演员,但不应包含的信息——即。,信息应该是“擦洗”或“净化”
  • 一个不同的弱点或错误间接插入敏感信息为资源,如web脚本错误揭示了全系统程序的路径。
  • 故意包含敏感信息的代码管理资源,但资源无意中做了访问未经授权的演员。在这种情况下,合成——即暴露信息。,一个不同的弱点使得访问信息在第一时间。

保密是常见的做法来描述任何损失作为“信息暴露,”但这可能导致过度使用cwe - 200CWE的映射。从CWE的角度来看,损失的机密性是一个技术的影响,可以来自几十个不同的弱点,如不安全的文件权限或界外阅读。cwe - 200及其底层的后代为了封面中发生的错误行为,明确管理、存储、传输或净化敏感信息。

+替代条款
信息披露:
这个词经常用于漏洞报告来描述结果或技术的影响,对任何漏洞,机密性的丧失。通常,cwe - 200可以被滥用代表机密性的损失,即使错误——即。,弱点是没有直接关系的处理不当的信息本身,比如一个界外读访问敏感的内存内容;这里,界外阅读是主要的弱点,没有记忆的信息披露。另外,这个词也经常在政策和法律文件,但它不参考任何安全相关信息的披露。
信息泄漏:
然而,这是一个经常使用的术语“泄漏”项中有多个使用安全。在某些情况下,处理意外接触的信息从一个不同的弱点,但是在其他情况下(比如内存泄漏),这种资源的处理不当跟踪,从而导致疲劳。因此,CWE积极避免使用术语“泄漏”。
+的关系
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+相关的视图”研究概念”(cwe - 1000)
自然 类型 ID 的名字
ChildOf 类类——一个弱点,描述的是一个非常抽象的时尚,通常独立于任何特定的语言或技术。更具体的比一个支柱的弱点,但更普遍的基本的弱点。类级别的弱点通常描述问题的1或2以下维度:行为、财产和资源。 668年 曝光资源错误的球体
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 201年 敏感信息插入发送数据
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 203年 可观察到的差异
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 209年 代的包含敏感信息的错误消息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 213年 由于不兼容的政策暴露敏感信息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 215年 敏感信息插入调试代码
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 359年 暴露私人个人信息未经授权的演员
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 497年 接触敏感的系统信息未经授权的控制范围
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 538年 敏感信息插入可外部访问文件或目录
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1258年 接触敏感的系统信息由于未清偿调试信息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1273年 设备开启共享凭证
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1295年 调试消息暴露不必要的信息
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 498年 可克隆类包含敏感信息
光束 变体变体——一个弱点与某种类型的产品,通常涉及到一个特定的语言或技术。更具体的比基本的弱点。变异水平弱点通常描述问题的3到5以下维度:行为、财产、技术、语言,和资源。 499年 可序列化的类包含敏感数据
光束 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 1272年 敏感信息未清偿前调试/功率状态转换
部分帮助此表显示了弱点和高水平类别相关的这一弱点。这些关系被定义为ChildOf、ParentOf MemberOf,并洞察类似项目可能存在的在较高和较低的抽象级别。此外,关系如PeerOf和CanAlsoBe定义显示类似的弱点,用户可能想要探索。
+简化映射的相关视图”缺点漏洞发布”(cwe - 1003)
自然 类型 ID 的名字
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 203年 可观察到的差异
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 209年 代的包含敏感信息的错误消息
ParentOf 基地Base -一个弱点,仍主要是独立的资源或技术,但有足够的细节来提供特定的检测和预防方法。基础水平的弱点通常描述问题的2或3以下维度:行为、财产、技术、语言,和资源。 532年 敏感信息插入日志文件
+模式的介绍
部分帮助不同模式的引入提供了信息如何以及何时可以纳入这一弱点。生命周期的阶段识别点的介绍可能发生,而相关的报告提供了一个典型的场景介绍在给定的阶段。
阶段 请注意
架构和设计
实现
+适用的平台
部分帮助该清单显示了给定的弱点可以可能的地区出现。这些可能是为特定命名的语言,操作系统,架构、模式、技术、或一个类这样的平台。列出的平台是随着频率的出现疲态实例。

语言

类:不是特定于语言的患病率(待定)

技术

类:移动患病率(待定)

+常见的后果
部分帮助这个表指定不同的个人相关后果的弱点。标识应用程序范围的安全领域侵犯,而影响了负面的技术影响,如果敌人成功利用这个弱点。可能提供的信息如何可能的具体结果预计将看到列表中相对于其它后果。例如,可能会有高可能性,缺点将被利用来实现一定的影响,但较低的可能性,它将被利用来实现不同的影响。
范围 影响 可能性
保密

技术的影响:读取应用程序数据

+利用的可能性
+示范例子

示例1

下面的代码检查的有效性提供的用户名和密码并通知用户的成功或失败的登录。

(坏的代码)
例如语言:Perl
我的$ username =参数(用户名);
我的密码美元=参数(“密码”);

如果(IsValidUsername(用户名)= = 1)
{
如果(IsValidPassword(用户名、密码)美元= = 1)
{
打印“登录成功”;
}
其他的
{
打印“登录失败,不正确的密码”;
}
}
其他的
{
打印“登录失败,未知的用户名”;
}

在上面的代码中,当一个不正确的用户名有不同的信息提供,而当用户名是正确的,但密码是错误的。这种差异使潜在的攻击者了解登录的状态函数,并可能允许攻击者发现一个有效的用户名通过尝试不同的值,直到返回不正确的密码信息。本质上,这使得攻击者更容易获得必要的身份验证凭证的一半。

虽然这种类型的信息对用户是有用的,也有用一个潜在的攻击者。在上面的示例中,消息都失败的情况下应该是一样的,如:

(结果)
“登录失败,错误的用户名或密码”

示例2

这段代码试图打开一个数据库连接,并打印任何发生的异常。

(坏的代码)
例如语言:PHP
尝试{
openDbConnection ();
}
/ /打印异常消息,包括异常消息和配置文件的位置
捕获(异常$ e) {
呼应了例外:,$ e - > getMessage (), ' \ n ';
回声,检查凭证在配置文件:“Mysql_config_location美元,' \ n ';
}

如果发生异常,则打印消息暴露的位置配置文件脚本使用。攻击者可以利用这些信息来目标配置文件(可能利用路径遍历的弱点)。如果文件可以读取,攻击者可以获得凭证访问数据库。攻击者还可以用恶意替换文件,导致应用程序使用一个任意的数据库。

示例3

在下面的示例中,该方法getUserBankAccount从数据库检索一个银行帐户对象使用提供的用户名和账号来查询数据库。如果一个SQLException提出查询数据库时,将创建一个错误消息输出到日志文件。

(坏的代码)
例如语言:Java
公共BankAccount getUserBankAccount(用户名的字符串,字符串accountNumber) {
BankAccount userAccount =零;
字符串查询=零;
尝试{
如果(isAuthorizedUser(用户名)){
查询= " SELECT *从账户所有者= "
+用户名+”和accountID = " + accountNumber;
DatabaseManager dbManager = new DatabaseManager ();
连接康涅狄格州= dbManager.getConnection ();
=声明支撑conn.createStatement ();
ResultSet queryResult = stmt.executeQuery(查询);
userAccount = (BankAccount) queryResult.getObject (accountNumber);
}
}捕捉(SQLException ex) {
字符串logMessage = "无法从数据库检索帐户信息,\ nquery:”+查询;
Logger.getLogger (BankManager.class.getName ()) . log(水平。严重,logMessage、交货);
}
返回userAccount;
}

创建的错误信息包括数据库查询的信息可能包含敏感信息的数据库或查询逻辑。在本例中,错误消息将公开数据库中使用的表名和列名。这些数据可以用来简化其他的攻击,如SQL注入(cwe - 89)直接访问数据库。

示例4

这个代码存储位置有关当前用户的信息:

(坏的代码)
例如语言:Java
locationClient = new locationClient(这个,这个,这个);
locationClient.connect ();
currentUser.setLocation (locationClient.getLastLocation ());


捕获(异常e) {
AlertDialog。Builder构建器= new AlertDialog.Builder(这个);
构建器。setMessage(“对不起,这个应用程序经历了一个错误。”);
AlertDialog警报= builder.create ();
alert.show ();
日志。e (“ExampleActivity”、“捕获异常:“+ e +“在用户:”+ User.toString ());
}

当应用程序遇到异常用户对象写入日志。因为用户对象包含位置信息,用户的位置也写入到日志。

示例5

下面是一个实际的MySQL错误语句:

(结果)
例如语言:SQL
警告:永久链接():拒绝访问的用户:‘root@localhost /usr/local/www/wi-data/includes/database.(使用密码:N1nj4)公司在4号线

错误显然暴露数据库证书。

例子6

这段代码在网页上显示一些信息。

(坏的代码)
例如语言:JSP
社会安全号码:< % = ssn % > < / br >信用卡号码:< % = ccn % >

代码显示一个用户的信用卡和社会安全号码,即使他们并不是绝对必要的。

例7

下面的程序基于调试标记改变它的行为。

(坏的代码)
例如语言:JSP
< %如果(Boolean.getBoolean (“debugEnabled”)) {
% >
用户帐号:< % = acctNo % >
< %
}% >

代码写敏感的调试信息到客户端浏览器如果“debugEnabled”标志被设置为true。

示例8

这段代码使用位置来确定用户的当前我们国家的位置。

首先应用程序必须声明,它需要在应用程序的manifest.xml ACCESS_FINE_LOCATION许可:

(坏的代码)
例如语言:XML
< uses-permission android: name = " android.permission.ACCESS_FINE_LOCATION " / >

在执行期间,调用getLastLocation()将返回一个基于位置的应用程序的位置的权限。在这种情况下,应用程序允许最准确的位置:

(坏的代码)
例如语言:Java
locationClient = new locationClient(这个,这个,这个);
locationClient.connect ();
userCurrLocation位置;
userCurrLocation = locationClient.getLastLocation ();
deriveStateFromCoords (userCurrLocation);

当应用程序需要这些信息,它不需要使用ACCESS_FINE_LOCATION许可,随着ACCESS_COARSE_LOCATION许可足以识别哪些我们国家的用户。

+观察到的例子
参考 描述
枚举的有效用户名不一致的反应
帐号枚举通过不一致的反应。
用户通过差异枚举错误消息。
Telnet协议允许服务器从客户获得敏感的环境信息。
脚本调用phpinfo(),揭示系统配置web用户
产品设置不同的TTL港口时比当它没有被过滤,过滤,允许远程攻击者识别过滤港口通过TTL比较。
版本控制系统允许远程攻击者决定任意的文件和目录的存在通过- x命令另一个历史文件,导致不同的错误信息返回。
虚拟机允许恶意网站运营商决定的存在文件在客户端通过测量延迟getSystemResource的执行方法。
产品立即发送一个错误消息当用户不存在,它允许远程攻击者通过计时攻击来确定有效的用户名。
POP3服务器显示密码在多个APOP命令后发送一条错误消息。可能结果从另一个弱点。
程序显示密码错误消息,如果攻击者可以触发特定的数据库错误。
复合材料:高特权运行的应用程序(cwe - 250)允许用户指定一个限制文件过程中,会生成一个解析错误,泄漏文件的内容(cwe - 209)。
直接请求在web应用程序触发库文件路径名泄漏在错误消息。
畸形的regexp语法暴露会导致信息的错误消息。
密码在调试信息。
FTP客户端启用了调试选项显示密码到屏幕上。
协作平台并不清楚团队的邮件响应,允许泄露的电子邮件地址
+潜在的缓解措施

阶段:体系结构和设计

策略:分离的特权

划分系统“安全”领域信任边界可以明确。不允许走出信任边界和敏感数据时总是小心与舱外的安全区域。

确保适当的划分是建立到系统设计,划分允许和强化特权分离功能。建筑师和设计师应该依靠最小特权原则来决定适当的时间使用特权和特权。

+弱点Ordinalities
Ordinality 描述
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
开发人员可能插入敏感信息,他们不相信,或者他们可能忘记删除敏感信息后加工
合成
(缺点是一个质量问题,可能会间接更容易引入的安全相关的弱点或使他们更难检测)
单独的错误或缺点可能无意中使攻击者可用的敏感信息,比如在一个详细的错误消息,可以读到一个未经授权的聚会
+检测方法

自动静态分析——二进制或字节码

根据飙升,以下检测技术可能是有用的:

成本有效的部分报道:
  • 字节码的弱点分析,包括反汇编程序+源代码弱点分析
  • 应用程序之间的流分析

有效性:飙升部分

动态分析与自动化的结果解释

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • Web应用程序扫描
  • Web服务的扫描仪
  • 数据库扫描仪

有效性:高

动态分析与人工解释结果

根据飙升,以下检测技术可能是有用的:

成本有效的部分报道:
  • 模糊测试
  • 基于框架Fuzzer
  • 自动化监控执行
  • 监控虚拟环境——在沙箱中运行潜在的恶意代码/包装/虚拟机,看看它任何可疑的

有效性:飙升部分

人工静态分析源代码

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • 手工源代码审查(不检查)

有效性:高

自动静态分析源代码

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • Context-configured源代码分析器
成本有效的部分报道:
  • 源代码缺陷分析仪

有效性:高

体系结构或设计审查

根据飙升,以下检测技术可能是有用的:

高成本效益:
  • 正式的方法/ Correct-By-Construction
成本有效的部分报道:
  • 攻击建模
  • 检验(IEEE 1028标准)(适用于需求、设计、源代码,等等)。

有效性:高

+会员资格
部分帮助这MemberOf关系表显示额外CWE类别和视图引用这个弱点作为成员。这些信息通常是有用的在理解一个弱点符合外部信息源的上下文中。
自然 类型 ID 的名字
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 635年 最初使用的弱点NVD从2008年到2016年
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 717年 OWASP 2007年十大类别A6——信息泄漏和错误处理不当
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 963年 SFP二级集群:公开数据
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1003年 弱点简化映射的漏洞发布
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1200年 弱点在2019 CWE最危险的软件错误
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1337年 2021 CWE最危险软件的弱点的弱点
MemberOf 类别类别——CWE条目包含一组其他条目,共享一个共同的特点。 1345年 OWASP 2021年十大类别A01:2021——破碎的访问控制
MemberOf 视图视图——CWE条目的一个子集,它提供了一种检查CWE的内容。两个主要视图结构片(列表)和图(包含条目之间的关系)。 1350年 2020 CWE最危险软件的弱点的弱点
+笔记

映射

使用映射:气馁(CWE ID不应该用来映射到实际的漏洞)。

理由是:cwe - 200常被误用来表示损失的机密性的弱点,但保密损失是一个技术的影响,而不是一个根源的错误。CWE 4.9,超过400 CWE条目会导致机密性的丧失。其他选项通常是可用的。(ref - 1287]。

评论:如果一个错误或错误导致信息披露,然后使用CWE ID的错误。考虑从授权不当(cwe - 285),不安全的权限(cwe - 732),不适当的身份验证(cwe - 287)等。还要考虑孩子等敏感信息插入发送数据(cwe - 201),可观察到的差异(cwe - 203),敏感信息插入可外部访问文件或目录(cwe - 538),或者其他人。

维护

映射分析的结果在2020年的前25位,最近的版本中,这个弱点正在审查,因为它是经常滥用映射来掩盖很多问题,导致损失的机密性。看到映射指出,扩展描述和备选项。
+分类法映射
映射分类名称 节点ID 适合 映射节点名
千鸟 信息泄漏(信息披露)
OWASP十大2007 A6 CWE更具体 信息泄漏和错误处理不当
WASC 13 信息泄漏
+引用
Chris Wysopal [ref - 172]。“移动应用前10名名单”。2010-12-13。<http://www.veracode.com/blog/2010/12/mobile-app-top-10-list/>。
(ref - 1287)主教法冠。“补充细节- 2022 CWE前25”。的细节问题映射。2022-06-28。<https://cwe.mitre.org/top25/archive/2022/2022_cwe_top25_supplemental.html problematicMappingDetails>。
+内容的历史
+提交
提交日期 提交者 组织
2006-07-19 千鸟
+贡献
贡献的日期 贡献者 组织
2022-07-11 尼克·约翰斯顿
识别不正确的语言标签在示范例子。
+修改
修改日期 修饰符 组织
2008-07-01 Eric Dalci Cigital
更新Time_of_Introduction
2008-09-08 CWE内容团队 主教法冠
更新Likelihood_of_Exploit、关系、Taxonomy_Mappings Weakness_Ordinalities
2008-10-14 CWE内容团队 主教法冠
更新描述
2009-12-28 CWE内容团队 主教法冠
更新Alternate_Terms、描述的名字
2010-02-16 CWE内容团队 主教法冠
更新Taxonomy_Mappings
2010-04-05 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2011-03-29 CWE内容团队 主教法冠
更新描述、人际关系
2011-06-01 CWE内容团队 主教法冠
更新Common_Consequences
2012-05-11 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2012-10-30 CWE内容团队 主教法冠
更新Potential_Mitigations
2013-02-21 CWE内容团队 主教法冠
更新Alternate_Terms Applicable_Platforms,引用
2014-06-23 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2014-07-30 CWE内容团队 主教法冠
更新Detection_Factors、人际关系
2015-12-07 CWE内容团队 主教法冠
更新的关系
2017-05-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2017-11-08 CWE内容团队 主教法冠
更新的引用
2019-01-03 CWE内容团队 主教法冠
更新Related_Attack_Patterns
2019-06-20 CWE内容团队 主教法冠
更新Related_Attack_Patterns、人际关系
2019-09-19 CWE内容团队 主教法冠
更新Demonstrative_Examples Observed_Examples,关系
2020-02-24 CWE内容团队 主教法冠
更新Applicable_Platforms、Demonstrative_Examples、描述、名称、Observed_Examples, Related_Attack_Patterns,关系,Weakness_Ordinalities
2020-06-25 CWE内容团队 主教法冠
更新的关系
2020-08-20 CWE内容团队 主教法冠
更新Alternate_Terms、描述Maintenance_Notes Related_Attack_Patterns,关系
2020-12-10 CWE内容团队 主教法冠
更新Potential_Mitigations
2021-07-20 CWE内容团队 主教法冠
更新的关系
2021-10-28 CWE内容团队 主教法冠
更新的关系
2022-10-13 CWE内容团队 主教法冠
更新Demonstrative_Examples Maintenance_Notes Observed_Examples,引用
+以前的条目名称
改变日期 以前的条目名称
2009-12-28 信息泄漏(信息披露)
2020-02-24 信息曝光
更多的信息是可用的,请选择一个不同的过滤器。
页面最后更新:2023年1月31日