Chormium 密码管理器表单结构体说明(基于Chromium138)

news/2025/9/26 8:58:31/文章来源:https://www.cnblogs.com/thankcat/p/19112469

这个结构体(struct PasswordForm)是 Chromium 浏览器(以及所有基于 Chromium 的浏览器,例如 Chrome、Edge 等)中密码管理器用来存储和管理单个登录凭证(即一组用户名和密码)的核心数据结构。它不仅包含了用户名和密码本身,还包含了大量关于该凭证的来源上下文元数据以及在网页表单中定位所需的信息。


🔑 枚举类型 (Enums) 解释

PasswordForm 结构体内部定义了四个重要的枚举类型,用于对表单和凭证进行分类和标记。

1. enum class Scheme (认证方案)

用于区分登录凭证的认证方式或来源。只有具有相同 SchemePasswordForm 才能相互匹配和自动填充。

成员 含义 备注
kHtml HTML 表单认证(默认) 最常见的网页登录表单。
kBasic HTTP Basic 认证对话框 浏览器弹出的基础认证窗口。
kDigest HTTP Digest 认证对话框 浏览器弹出的摘要认证窗口。
kOther 其他类型的认证方案。 通用或未知方案。
kUsernameOnly 仅包含用户名的凭证。 仅保存用户名的场景。

2. enum class Type (凭证类型)

用于区分凭证的创建或获取方式,这个值会被转换成整数并存储在密码后端,因此其数值是固定的。

成员 数值 含义
kFormSubmission 0 通过用户提交网页表单保存的凭证(最常见)。
kGenerated 1 由密码管理器自动生成并保存的密码。
kApi 2 通过 Credential Management API 存储的凭证。
kManuallyAdded 3 用户在设置界面中手动添加的凭证。
kImported 4 从其他来源导入的凭证。
kReceivedViaSharing 5 通过密码分享功能接收到的凭证。
kImportedViaCredentialExchange 6 通过凭证交换机制导入。
kChangeSubmission 7 用户修改密码后保存的凭证。

3. enum class GenerationUploadStatus (生成上传状态)

跟踪关于密码生成的信息是否已发送到服务器。

成员 含义
kNoSignalSent 未向服务器发送信号。
kPositiveSignalSent 发送了积极信号(例如:用户使用了生成的密码)。
kNegativeSignalSent 发送了消极信号(例如:用户没有使用生成的密码)。

4. enum class MatchType (匹配类型)

这是一个位掩码(bitmask),用于描述 PasswordForm 如何与当前页面的表单或 URL 进行匹配,一个凭证可以有多种匹配类型。

成员 含义
kExact 0 精确匹配:凭证的 signon_realm 与请求的 URL 完全一致。
kAffiliated 1 << 1 (2) 关联匹配:通过关联服务(Affiliation Service)判断,signon_realm 与 URL 属于同一组关联网站。
kPSL 1 << 2 (4) 公共后缀列表匹配(Public Suffix List):signon_realm 与 URL 具有相同的 eTLD+1(effective Top-Level Domain + 1,例如 example.com)。
kGrouped 1 << 3 (8) 分组匹配:通过分组信息判断,signon_realm 与 URL 属于同一组。

5. enum class Store (存储位置)

指示凭证存储的位置,它也是一个位掩码,一个凭证可能同时存在于两个存储中。

成员 含义
kNotSet 0 未设置(默认值)。
kProfileStore 1 << 0 (1) 本地配置文件存储:凭证存储在本地设备。
kAccountStore 1 << 1 (2) 账户存储:凭证存储在与 Google 账户同步的云端存储中。

📊 核心数据字段 (Core Fields) 解释

这些字段是识别和定位凭证在数据库中的位置,以及在网页上进行自动填充的关键信息。

1. 身份和定位 (Identity & Location)

字段 类型 作用和重要性
primary_key std::optional<FormPrimaryKey> 数据库中的主键,仅当从数据库读取时设置,用于唯一标识数据库记录。
scheme Scheme 认证方案(来自上面的枚举),默认是 kHtml
signon_realm std::string 登录域/范围。对于 HTML 表单,它通常是 scheme://host:port。对于对话框,包含 HTTP Realm。它实际上是检索数据的“主键”
url GURL 表单所在页面的 URL (scheme, host, port, path)。密码管理器用它来决定哪个凭证适合当前页面(最长前缀匹配)。
action GURL 表单提交的 URL(即 <form action="..."> 中的值)。这是自动填充的主要数据,保存的凭证的 action 必须与页面表单的 action 匹配才能自动填充。如果为空,则采用受限的自动填充策略(等待用户输入用户名)。

2. 用户名和密码 (Username & Password)

字段 类型 作用和重要性
username_element std::u16string 用户名输入框的 name 属性
username_value std::u16string 实际保存的用户名
password_element std::u16string 当前密码输入框的 name 属性
password_value std::u16string 实际保存的当前密码非空是凭证可以持久化到密码存储的必要条件。
new_password_element std::u16string 新密码输入框的 name 属性(用于注册或修改密码表单)。不持久化。
new_password_value std::u16string 实际保存的新密码(不持久化)。
all_alternative_usernames AlternativeElementVector 所有可能的备选用户名,用于填充下拉列表。
all_alternative_passwords AlternativeElementVector 所有可能的备选密码(用于待定密码状态)。
keychain_identifier std::string 钥匙串标识符(仅在 iOS 上使用)。

3. 元数据和状态 (Metadata & Status)

字段 类型 作用和重要性
date_last_used base::Time 上次使用此登录凭证的日期
date_password_modified base::Time 上次修改密码值的日期。旧凭证可能为空。
date_created base::Time 登录信息被 Chrome 保存的日期
blocked_by_user bool 用户是否选择了永不记住此站点的密码。
type Type 凭证类型(来自上面的枚举),默认是 kFormSubmission
times_used_in_html_form int 此用户名/密码在 HTML 表单中使用的次数
in_store Store 凭证存在于哪个或哪些存储中(本地或账户同步)。
password_issues base::flat_map<...> 凭证的安全问题(例如泄露、钓鱼)及其元数据。
notes std::vector<PasswordNote> 附加到凭证的笔记

4. Android 和关联信息 (Android & Affiliation)

这些字段主要用于关联桌面浏览器密码和 Android 应用密码。

字段 类型 作用和重要性
affiliated_web_realm std::string 如果是 Android 凭证,这是关联的网页域
app_display_name std::u16string 如果是 Android 凭证,这是应用的显示名称(如 Play 商店名称)。
app_icon_url GURL 如果是 Android 凭证,这是应用图标的 URL

5. Credential Management API 和 WebAuthn (凭证管理 API)

字段 类型 作用和重要性
display_name std::u16string 用户友好的名称(由 Credential Management API 设置)。
icon_url GURL 用于在 UI 中显示的凭证图标 URL(如用户头像)。
federation_origin url::SchemeHostPort 身份提供者(Federated Login,如“使用 Google 登录”)的来源。
skip_zero_click bool 如果为 true,Chrome 不会在没有用户交互的情况下将此凭证返回给站点。
accepts_webauthn_credentials bool 表单是否可以填充 WebAuthn 凭证。

6. 密码分享信息 (Password Sharing)

字段 类型 作用和重要性
sender_email std::u16string 共享此密码的发送者邮箱
sender_name std::u16string 共享此密码的发送者姓名
sender_profile_image_url GURL 发送者的个人资料图片 URL
date_received base::Time 通过分享功能接收此密码的日期
sharing_notification_displayed bool 是否已向用户展示分享通知。

🛠️ 方法 (Methods) 解释

结构体包含了一系列判断表单类型的辅助方法和访问器。这些方法通常基于表单中不同元素的组合(如是否同时存在当前密码和新密码字段)来推断表单的用途。

方法 作用
IsLikelyLoginForm() 基于启发式规则判断是否为登录表单(有用户名、密码,无新密码)。
IsLikelySignupForm() 基于启发式规则判断是否为注册表单(有用户名、新密码,无当前密码)。
IsLikelyChangePasswordForm() 基于启发式规则判断是否为修改密码表单(有当前密码,有新密码)。
IsLikelyResetPasswordForm() 基于启发式规则判断是否为重置密码表单(有新密码,无当前密码或用户名)。
GetPasswordFormType() 返回表单的分类类型(更细致的分类)。
HasUsernameElement() / HasPasswordElement() / HasNewPasswordElement() 检查对应的输入元素是否存在。
IsFederatedCredential() 检查 federation_origin 是否非空(是否为联合登录凭证)。
IsSingleUsername() 检查是否仅有用户名元素而没有密码或新密码元素。
IsUsingAccountStore() / IsUsingProfileStore() 检查凭证是否存储在账户或配置文件存储中。
HasNonEmptyPasswordValue() 检查 password_valuenew_password_value 是否非空。

struct PasswordForm 是 Chromium 密码管理器中存储一个登录实体全面记录。它是一个高度工程化的结构,旨在支持多种认证方式(HTML、Basic/Digest)、多种凭证来源(提交、生成、API、导入)、跨平台(桌面、Android)的关联以及复杂的自动填充和密码安全检查逻辑。简单来说,它就是密码管理器中的一个“密码卡片”,但包含的元数据远超卡片本身所展示的内容。

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

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

相关文章

为什么人工智能选择Python?深入解析AI界的胶水语言

在人工智能(AI)的黄金时代,Python几乎"统治"了整个领域。从深度学习到机器学习,从学术研究到工业应用,Python无处不在。 但为什么是Python?为什么不是性能更强的C++、生态成熟的Java,或者其他现代语言…

惠安网站建设报价网站开发工程师招聘要求

有很多网友在问&#xff1a;TPlink路由器端口映射怎么设置&#xff1f;因为不懂端口映射的原理&#xff0c;所以无从下手&#xff0c;下面小编就给大家分享TPlink云路由器界面端口映射设置方法&#xff0c;帮助大家快速入门TP路由器端口映射设置方法。 1.登录路由器管理界面&a…

咸宁网站设计windows 上wordpress

上一篇中 我们详细讲了内存溢出 内存泄漏 还有相关的案例。 这篇博客中我们主要了解一下GC调优。 有些新手可能会有一点 疑问—— 这两者不是一回事吗&#xff1f;&#xff1f; 其实说一回事 也没错 因为GC调优本质上还是针对 堆上的内存 只不过前面我们关注的侧重点在于 不合…

模版网站有源代码吗注册公司代理费用多少钱

【vs2019】window10环境变量设置 【先赞后看养成习惯】求关注点赞收藏&#x1f60a; 安装VS2019时建议默认安装地址&#xff0c;最好不要改动&#xff0c;不然容易出问题 以下是安装完VS2019后环境变量的设置情况&#xff0c;C:\Program Files (x86)\Microsoft Visual Studi…

1 day(20250925) - when

第一天,好像时间还可利用的地方很多,其实是效率和时长都有待提升。 哇要做的事情都蛮复杂和多的,其实没那么难对吧,不过太多了,想要迈大步就变得不可能实现,而且迈大步总感觉会错过一些细节,不能够有底气。但是…

12分钟讲解Python核心理念

https://segmentfault.com/a/1190000047277781 12分钟讲解Python核心理念 本内容是对 Every Python Concept Explained in 12 Minutes 内容的翻译与整理。 Python之禅(The zen of Python) 当你在Python解释器中输入i…

【重要】什么是 PEP 8 规范

PEP 8 是 Python 官方的代码风格指南,全称为 Python Enhancement Proposal 8(Python 增强提案 8),旨在通过统一编码规范提升代码的可读性、一致性和可维护性。以下是其核心内容与重要性: 一、PEP 8 的核心规范代码…

实用指南:华为坤灵:点燃中小企业智能化的星火

实用指南:华为坤灵:点燃中小企业智能化的星火pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &…

阻止HTML input元素(type=number)中输入字母e的方法

在HTML中,<input type=number> 元素允许用户输入一个数字,它可以包含正数、负数、整数、浮点数以及特殊字符,如 e表示科学计数法。然而,在某些情况下,你可能不希望允许用户输入字母 e。为了实现这一目标,可…

荣县规划和建设局网站如何建设企业网站

力扣138&#xff1a;随机链表的复制 题目描述&#xff1a; 给你一个长度为 n 的链表&#xff0c;每个节点包含一个额外增加的随机指针 random &#xff0c;该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成&#xff…

网站开发课表查询吉安工商注册官方网站

简介&#xff1a; 智能的运维平台&#xff0c;帮助企业业务平稳、智能、高效地运行。 每一起严重事故背后&#xff0c;必然有29次轻微事故和300起未遂先兆以及1000起事故隐患。—— 海恩法则(Heinrich‘s Law) 随着云计算时代的到来&#xff0c;大量企业将自己的业务逐步迁移…

网站建设广西企业展厅建筑外观

自己总结的&#xff0c;给大家参考一下&#xff0c;

【Prompt学习技能树地图】利用GitHub-Prompt Engineering Guide进阶学习Prompt工程指南 - 指南

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

没有服务器 怎么做网站机构改革 住房与城乡建设厅网站

1️⃣ Nikto漏洞扫描 Nikto是一个开源的Web扫描评估程序&#xff0c;它可以对目标Web服务器进行快速而全面的检查&#xff0c;以发现各种潜在的安全问题和漏洞。 &#x1f170;️ 如何使用 ❓ nikto -Display 1234ep -h [域名或IP地址] -o nikto.html # -h参数&#xff1a;指…

下载好模板该怎么做网站google优化推广

java生成指定范围的随机数 /*** 如何在程序中生成指定范围的随机数** 生成23-59之间的随机数*/ public class Test11 {public static void main(String[] args) {/*** Math.random() 生成&#xff08;0,1&#xff09;之间的小数&#xff0c;不包括0和1* 所以生成23-59之间的随…

深入解析:KRaft 运维从静态到动态 Controller

深入解析:KRaft 运维从静态到动态 Controllerpre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &q…

Windows时间同步列表注册表授时时间服务器

前言全局说明Wnindows 时间同步列表添加删除一、说明 1.1 环境: Windows 7 旗舰版二、时间同步列表 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\DateTime\Servers三、授时时间服务器: 57种语言,…

常州网站建设要多少钱企业运营流程

本文将探讨嵌入式系统中的GPIO(通用输入输出)控制,着重介绍GPIO的原理和基本用法。我们将使用一个实际的示例项目来演示如何通过编程配置和控制GPIO引脚。将基于ARM Cortex-M微控制器,并使用C语言进行编写。 GPIO是嵌入式系统中最常见且功能最强大的接口之一。它允许硬件工…

epub如何让标题在竖直方向居中

这个页面的内容就只有标题,要独占这个页面居中,且适配不同的屏幕尺寸,下面是最好的办法。 <!DOCTYPE html> <html lang="zh"> <head><meta charset="UTF-8"><meta …