12. User Agent Implementation Advice (用户代理实施建议)
本节是非规范性的.
为了为用户和网站提供更有效的保护, 以及用于管理其UA缓存HSTS策略的控制, UA实现者应考虑包括诸如以下的功能:
12.1 No User Recourse (无用户补救措施)
在任何警告或错误上失败的安全连接建立 (根据第8.4节 ("Errors in Secure Transport Establishment")) 应以"无用户补救措施 (no user recourse)"完成. 这意味着不应向用户呈现一个对话框, 让她选择继续进行. 相反, 它应该类似于服务器错误处理, 用户在与目标Web应用程序交互方面无法做任何进一步的事情, 除了等待和重试.
基本上, "任何警告或错误"意味着任何会导致UA实现向用户宣布连接建立有些不完全正确的事情.
不这样做, 即允许用户补救措施, 例如"点击通过警告/错误对话框", 是中间人攻击的配方. 如果Web应用程序发出HSTS策略, 那么它隐式地选择"无用户补救措施"方法, 即所有证书错误或警告都导致连接终止, 没有机会"愚弄"用户做出错误的决定并危及他们自己.
12.2 User-Declared HSTS Policy (用户声明的HSTS策略)
用户声明的HSTS策略是用户能够明确声明给定域名表示HSTS主机的能力, 从而在与其进行任何实际交互之前将其播种为已知HSTS主机. 这将有助于防止bootstrap MITM漏洞, 如第14.6节 ("Bootstrap MITM Vulnerability") 中所讨论的.
注意 (NOTE): 这样的功能很难在每个站点的基础上做对. 参见 [ForceHTTPS] 第5.5节中关于"重写规则"的讨论. 例如, 任意网站可能不会使用"https"方案具体化其所有URI, 因此如果UA试图仅使用此类URI独占访问站点, 则可能"破坏". 还要注意, 此功能将补充, 但独立于"HSTS预加载列表"功能 (参见第12.3节).
12.3 HSTS Pre-Loaded List (HSTS预加载列表)
HSTS预加载列表是一种设施, 通过该设施, 网站管理员可以让UA供应商以类似于根CA证书在"出厂时"嵌入浏览器的方式, 预先配置其站点的HSTS策略 -- 所谓的"预加载列表". 这将有助于防止bootstrap MITM漏洞 (第14.6节).
注意 (NOTE): 这样的设施将补充"用户声明的HSTS策略"功能 (第12.2节).
12.4 Disallow Mixed Security Context Loads (禁止混合安全上下文加载)
当UA通过安全传输获取的Web应用程序资源随后导致获取一个或多个其他资源而不使用安全传输时, 就会发生"混合安全上下文 (mixed security context)"加载. 这通常也被称为"混合内容 (mixed content)"加载 (参见 [W3C.REC-wsc-ui-20100812] 第5.3节 ("Mixed Content")), 但不应与在XML和HTML等标记语言上下文中也使用的相同"混合内容"术语混淆.
注意 (NOTE): 为了在UA实现之间提供行为一致性, 混合安全上下文的概念将需要进一步的标准化工作, 例如, 更清楚地定义术语并定义与之相关的特定行为.
12.5 HSTS Policy Deletion (HSTS策略删除)
HSTS策略删除是在每个HSTS主机的基础上删除UA缓存的HSTS策略的能力.
注意 (NOTE): 添加这样的功能应该在用户界面和安全意义上都非常小心地完成. 删除已知HSTS主机的缓存条目应该是一个非常慎重和深思熟虑的行为 -- 它不应该是用户习惯于作为例行公事做的事情: 例如, 只是"点击通过"以完成工作. 此外, 实现需要防止允许攻击者将代码 (例如, ECMAscript) 注入UA, 该代码会静默地和程序化地从UA的已知HSTS主机缓存中删除条目.