gpt4 book ai didi

jsf-2 - com.sun.faces.ClientStateSavingPassword - 实际密码的建议?

转载 作者:行者123 更新时间:2023-12-03 00:26:20 26 4
gpt4 key购买 nike

在我发现的有关加密 ViewState 的所有引用页面中,对密码的唯一注释是“此处是您的密码”。

对于我们应该使用的密码长度/复杂性有什么建议吗?

最佳答案

取决于 Mojarra 版本。它在早期版本中存在一些缺陷/失败。

Mojarra 1.2.x - 2.1.18中,它从未被实际使用过。 JNDI 条目名称的记录不正确。这是documentedcom.sun.faces.ClientStateSavingPassword (与 Mojarra's other web.xml context parameters 具有相同的前缀),但代码 actually检查ClientStateSavingPassword。然后您应该使用该名称进行注册。

<env-entry>
<env-entry-name>ClientStateSavingPassword</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>[Your Password]</env-entry-value>
</env-entry>

否则,客户端状态实际上未加密。

Mojarra 1.2.x - 2.0.3中,密码will用作SecureRandom seed生成 DES algorithm key 。因此,一般来说,相同的规则适用于 "real world" passwords 。只是,这可以很容易compromised如果密码“太简单”并且攻击者成功猜测/暴力破解/计算出密码。

Mojarra 2.0.4 - 2.1.x 中,它们 changed从 DES 到 AES 的算法和代码现在不 actually不再使用提供的密码来生成 key (以防止潜在的泄露)。相反,完全随机的 key 是 generated ,这样更安全。 JNDI 条目现在基本上控制客户端状态是否应该加密。换句话说,它现在的行为就像一个 bool 配置条目。因此,您使用哪个密码绝对不再重要。

<env-entry>
<env-entry-name>ClientStateSavingPassword</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>[Any value is interpreted as boolean=true to enable encryption]</env-entry-value>
</env-entry>

Mojarra 2.1.19 - 2.1.x 中,它们 fixed用于对齐 JNDI 条目名称的文档的代码。因此您可以使用记录的 JNDI 条目名称:

<env-entry>
<env-entry-name>com.sun.faces.ClientStateSavingPassword</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>[Any value is interpreted as boolean=true to enable encryption]</env-entry-value>
</env-entry>

但是,这仍然不会影响 AES key ,该 key 自 2.0.4 以来已更改,它基本上仍然仅启用/禁用加密。

Mojarra 2.2.0 - 2.3.x 中,作为 JSF 2.2 specification 的一部分(第 7.8.2 章),客户端状态现在默认为 always加密的。仅当 web.xml 上下文参数 com.sun.faces.disableClientStateEncryption 时才会禁用它。设置为值 true。它still使用 AES 算法和 completely random key 。 JNDI 条目com.sun.faces.ClientStateSavingPassword 现在不再使用。

Mojarra 2.2.6 - 2.3.x 中,他们按照 issue 3087 添加了内容一个新的 JNDI 条目,允许您以 Base64 编码格式指定 AES key the jsf/ClientSideSecretKey 。这是在集群环境中使用 JSF Web 应用程序时客户端状态失败的错误修复的一部分,因为每个服务器使用不同的 AES key ,这只会在状态时导致 ERROR: MAC did not verify!在与保存状态的服务器不同的服务器中恢复,如 issue 2557 中所述。 .

<env-entry>
<env-entry-name>jsf/ClientSideSecretKey</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>[AES key in Base64 format]</env-entry-value>
</env-entry>

您可以使用这个AES key generator生成一个(刷新页面重新生成),或使用下面的代码片段生成您自己的 Base64 -编码AES256关键:

KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(256); // Use 128 for AES128 (when server don't have JCE installed).
String key = Base64.getEncoder().encodeToString(keyGen.generateKey().getEncoded());
System.out.println(key); // Prints AES key in Base64 format.

关于jsf-2 - com.sun.faces.ClientStateSavingPassword - 实际密码的建议?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231372/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com