Chormium 密码管理器表单结构体说明(基于Chromium138)
这个结构体(struct PasswordForm)是 Chromium 浏览器(以及所有基于 Chromium 的浏览器,例如 Chrome、Edge 等)中密码管理器用来存储和管理单个登录凭证(即一组用户名和密码)的核心数据结构。它不仅包含了用户名和密码本身,还包含了大量关于该凭证的来源、上下文、元数据以及在网页表单中定位所需的信息。
枚举类型 (Enums) 解释
PasswordForm 结构体内部定义了四个重要的枚举类型,用于对表单和凭证进行分类和标记。
1. enum class Scheme (认证方案)
用于区分登录凭证的认证方式或来源。只有具有相同 Scheme 的 PasswordForm 才能相互匹配和自动填充。
| 成员 | 含义 | 备注 |
|---|---|---|
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_value 或 new_password_value 是否非空。 |
struct PasswordForm 是 Chromium 密码管理器中存储一个登录实体的全面记录。它是一个高度工程化的结构,旨在支持多种认证方式(HTML、Basic/Digest)、多种凭证来源(提交、生成、API、导入)、跨平台(桌面、Android)的关联以及复杂的自动填充和密码安全检查逻辑。简单来说,它就是密码管理器中的一个“密码卡片”,但包含的元数据远超卡片本身所展示的内容。
Chormium 密码管理器表单结构体说明(基于Chromium138)的更多相关文章
- 用firefox 31配合KeePass密码管理器实现web帐号密码自动填写登录
原文:http://bbs.kafan.cn/thread-1754676-1-1.html KeePass的优势:1.这是一款完全开源的密码管理器2.很多人都使用lastpass来保存密码,而这种严 ...
- Keeweb-Linux的密码管理器
Keeweb-Linux的密码管理器 如今,我们依赖于越来越多的线上服务.我们每注册一个线上服务,就要设置一个密码:如此,我们就不得不记住数以百计的密码.这样对于每个人来说,都很容易忘记密码.那么,下 ...
- jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jquery筛选方法
jQuery---jq基础了解(语法,特性),JQ和JS的区别对比,JQ和JS相互转换,Jquery的选择器(基础选择器,层级选择器,属性选择器),Jquery的筛选器(基本筛选器,表单筛选器),Jq ...
- RookeyFrame Bug 表单管理 -> 查看表单 ->编辑字段页面 JS报错
表单管理 -> 查看表单 ->编辑字段页面 小bug onchange里面直接就是方法,修改:去掉外面的function(){},直接把方法体写在onchange里面就可以了. 后台方法: ...
- 跨平台开源密码管理器 KeePassXC
简介 KeePassXC 是一个开源的跨平台密码管理器.基于 KeePass 二次开发. KeePassXC 可以安全地在本地存储您的密码,配合浏览器插件KeePassXC-Browser可辅助登录. ...
- 在Express 中获取表单请求体数据
在Express 中获取表单请求体数据 获取 GET 请求参数 获取 POST 请求体数据 安装 配置 获取 GET 请求参数 Express 内置了一个 API , 可以直接通过 req.query ...
- jQuery基本筛选器-表单筛选器-关系筛选器
一.基本筛选器 :first // 第一个 :last // 最后一个 :eq(index)// 索引等于index的那个元素 :even // 匹配所有索引值为偶数的元素,从 0 开始计数 :odd ...
- [oldboy-django][2深入django]老师管理 -- form表单如何生成多选框标签,多选框的默认值显示,以及多选框数据插入到数据库,多选框数据更改到数据库
1 form表单如何生成多选框(包含了多选框可选择内容) - Form设置班级输入框为 select多选 - 多选 class TeacherForm(Form): name = fields.Cha ...
- 字符串输出输入函数,const修饰符,内存分区,动态内存管理,指针和函数,结构体
1.字符串输出输入函数 读入字符串的方法: 1) scanf 特点:不能接收空格 2) gets 特点:可以接受含有空格的字符串 ,不安全 3) fgets(); 特点:可以帮我们自动根据数组的长度截 ...
- C++线性表通过结构体实现操作和结构体字符串快速排序和shell排序结合
#include<iostream> #include<string> #define ml 10 using namespace std; typedef struct{// ...
随机推荐
- CSP-S 2024 游记
上午 上午打板+睡觉.希望能比去年有进步. 下午 下午进考场,好像来早了,一直没见到带考的老师,于是自己先进去了. 鼠标不好用,滚轮坏了,申请换一个.结果更不好用,过一会就卡一下.于是换了个位置,鼠标 ...
- 前端开发系列040-基础篇之TypeScript简单介绍
一.TypeScript语言简单说明 简单说明 TypeScript 是微软2012年推出的一种编程语言,属于 JavaScript 的超集,可以编译为 JavaScript 执行.它最大特点是强大的 ...
- java 注解&含义
简介 随着 Spring Cloud 统一 java 编程. 注解可以完成很多基础项目的配置. 有的时候看不懂注解,也就看不懂代码 Example @Service 即将类交给Spring进行管理,一 ...
- 入门书籍 web前端开发最佳实践
高效web前端开发 book PageSpeed 出自google公司 是一款 免费的工具 性能分析 Timeline网页交互 和渲染 所要花费的时间 Profile谁 可以查看网页c ...
- 回答准确率从60%飙至95%!AI知识库救命方案
AI 的浪潮席卷而来,各行各业都在积极探索 AI 的落地应用,无论是为了提升工作效率,还是为了在同事和领导面前展现技术实力,技术先行者们都跃跃欲试.在众多 AI 落地场景中,**知识库(Retriev ...
- 产品更新丨谷云 AI Agent 智能体版本更新
这次谷云科技AI Agent 智能体迎来了更新,此次更新聚焦于功能新增与优化,旨在提升智能体性能,深化平台交互体验,助力您在数据驱动的决策旅程中更加得心应手. 功能新增,开启智能新篇 1.MCP 服务 ...
- 【深度品质】win10 21h1 64位专业版系统 V2021.03
[深度品质]win10 21h1 64位专业版系统 V2021.03 文件: w1021h1x64cj.rar大小: 5993449476 字节 5.58GBMD5: C38D6CF3F5226901 ...
- Unity帧同步框架与教程
框架: https://github.com/JiepengTan/LockstepEngine 教程: https://github.com/JiepengTan/Lockstep-Tutorial ...
- UnityEditor工具链开发的常用小技巧与示例
github链接 https://github.com/XINCGer/UnityToolchainsTrick UnityToolchainsTrick 提供一些UnityEditor工具链开发的常 ...
- AutoCAD2026界面底部状态栏不见了,如何找回?
打开AutoCAD软件发现底部的状态栏突然没了,给绘图工作带来了很大的不便,但又不知道该如何找回? 其实,底部状态栏可通过系统变量STATUSBAR来控制状态栏的显示,如下,参数0表示隐藏底部状态栏, ...