【问题标题】:Java text modification on JSPJSP 上的 Java 文本修改
【发布时间】:2012-05-14 07:38:31
【问题描述】:

我的 .jsp 页面上有一个表单,它将密码发送回服务器。

<form name="login" action="j_security_check" method="post">
    <input type="text" name="j_username">
    <input type="password" name="j_password">
    <input type="submit" name="Login"> </form>

我想在处理 j_password 之前对其进行一些处理。 以前,我通过调用执行类似于以下操作的函数,通过一些处理代码实现 JavaScript 来做到这一点:

<script type="text/javascript" src="sha256.js">
<script> function hash() { document.login.j_password.value = '@' +
    sha256_digest(document.login.j_password.value); } </script>
...
...
    <input type="submit" value="Login" onClick="hash()"> </form>

现在,我正在尝试实现类似的功能,但我不使用 JavaScript,而是尝试使用 Java。我的 .java 的主要目的是加载 public.key,获取 j_password,执行加密,并将 j_password 替换为其加密形式。

// RSA.java Pseudocode
1) Get string from textbox "j_password"
2) Load public key from public.key
3) Perform encryption on j_password with key
4) Load cipher to textbox "j_password"

但是,我看到的大多数示例都实现了“”调用,但这给我的印象是它会在页面加载时执行,而不是在单击登录按钮时执行。我还注意到我可以使用 javac 将其编译为 .class 并将其加载为“”,但是可以使用此方法修改 j_password 的输入吗?虽然它是一个 .jsp 并且我可以使用“”直接实现 Java,但我认为它在当前的 JSP 标准中是不可接受的。有没有人有任何建议或想法可以为我指明正确的方向?

谢谢。

【问题讨论】:

  • 只是一个想法:加密密码是因为您不希望通过网络将原始密码传递给服务器。如果您在服务器端加密密码,那么它违背了目的。
  • 是的,因此我想知道是否有办法在客户端提交之前进行此加密,但使用 Java 来完成。
  • 在典型的 Java Web 应用程序中,您在 Java 上编写的任何内容都会在服务器端执行。所以javascript是你唯一的选择。
  • 哦该死的,我想我得更深入地挖掘替代方案。虽然我的印象是 Java 小程序可以使用 JVM 运行客户端。
  • 您可能想要为有帮助的答案投票并接受更可能是您想要的解决方案的答案。

标签: java forms webforms


【解决方案1】:

您可以使用Filters 进行加密,但它不会在客户端。正如您在该列表中看到的那样,过滤器也用于加密,就像您需要的目的一样。干预某事的唯一方法是使用过滤器。但是如果你需要客户端加密,唯一的出路就是 JavaScript。

您还可以查看thisthis

第二个链接很好地解释了在客户端散列密码。其中一个答案提到了这一点:

对于这个问题,更安全的身份验证协议通常会跳过许多环节,以确保这样的重放攻击无法起作用,通常是通过允许客户端选择一堆随机位,这些位被散列用密码,并以明文形式提交给服务器。

在服务器上:

  • 生成几位随机数
  • 将这些位(以明文形式)发送给客户端

在客户端:

  • 生成一些随机位
  • 连接密码、服务器随机位和客户端随机 位
  • 生成上述哈希
  • 向服务器提交随机数据(明文)和哈希

由于服务器知道自己的随机信息以及客户端的随机位(它以明文形式获取它们),因此它可以执行基本相同的转换。该协议确保,只要双方每次生成不同的“噪声位”,任何人都可以在以后使用该信息来使用记录的信息进行虚假身份验证(除非使用了非常弱的算法......),进行握手。

【讨论】:

  • 嗨。我已经为服务器端实现了过滤器。它将使用私钥解密密码。
  • 那么,客户端加密只有一个选项,JavaScript。否则,在您的密码到达服务器之前,您只有一种干预方式,即使用过滤器(同样,它不会发生在客户端,它会发生在服务器端)。
【解决方案2】:

您是否尝试加密密码以提交到服务器?如果是这样,您不能使用 JSP,因为处理是在服务器上执行的,而不是在客户端上执行的。

JSP 是一种使用 Java 构建动态网页的方法,但所有处理指令都被转换为 servlet,然后它们遵循常规的 servlet 生命周期。如果要在客户端加密,则需要使用客户端语言。请记住,如果您使用 SSL 发送/接收您的提交,数据加载将自动加密。

如果您要将存储转换为数据库,那么您最好为表单处理程序使用标准 servlet。

【讨论】:

  • 嗨。是的,我打算在客户端加密,提交到服务器,过滤器将解密 j_security_check 的密码。我知道它是客户端,我应该使用 .js。不幸的是,我还没有找到使用 RSA2048 和我指定的 public.key 进行加密的 javascript 文件。
  • jcryption.org 将允许您在客户端进行加密。但是请注意,这仍然是一种有缺陷的方法,因为您仍然会受到中间人攻击并且不提供信任机制。你真的应该使用 SSL。
  • 谢谢。我将研究jcryption。是的,SSL 已启用,但我希望了解 SSL 未启用的假设情况。
  • 您可以控制是否使用 SSL,这对最终用户来说不是可选的附加功能,因此确实不应该出现这种情况。关于小程序,这是在客户端执行的,但您现在要求您的用户安装并启用 Java。这是一种更繁重的方法。
猜你喜欢
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 2022-12-14
  • 2012-07-15
相关资源
最近更新 更多