raj*_*77m 6 java ssl https jsp sha256
这可能是一个老问题,但我仍然没有找到这个问题的正确答案,所以请耐心等待。我有一个 https 登录页面,它使用表单发布方法并将凭据发送到服务器......等等。
登录时,如果使用IE和F12进行网络监控,点击开始抓包。您可以看到一些类似于 login、servetloginauth(来自 gmail.com)的 URL,并且您可以看到包含您的用户名和密码的请求正文。好吧,可以争辩说,只有当用户没有注销时,您才能看到这一点。
现在注销并且不要关闭浏览器并从任务管理器中获取浏览器转储(任何浏览器,任何版本)(我不知道如何在 Mac 中做同样的事情)。使用 WinHex 编辑器打开转储文件并执行 Search/Find: "password=" 或实际密码(因为您测试了您自己的登录信息,您已经知道您的密码)。您可以以明文形式查看密码。
现在我的问题是,如何屏蔽密码: 1. 在 Post 请求 URL 中 2. 或者当浏览器将我的凭据保存到转储时,我需要对其进行屏蔽/加密或根本不应该保存密码.
我的jsp代码:
<s:form id="login" name="loginForm1" action="login" namespace="/" method="post" enctype="multipart/form-data" >
<fieldset><!-- login fieldset -->
<div><!-- div inside login fieldset -->
<div....
<label for="password" class="loginLabel">Password</label>
<input type="password" name="password" id="password" class="longField nofull absPosition" size="16" autocomplete="off" alt="Password" placeholder="Password" title="Password|<
Run Code Online (Sandbox Code Playgroud)
我目前的解决方案如下,但我不需要太多努力就需要任何替代方案。
如果密码以明文形式发送,则可以从内存中读取密码。使用加盐散列技术进行密码传输将解决此问题。散列是一种密码技术,其中的实际值永远无法恢复。在加盐散列技术中,密码以散列形式存储在数据库中。服务器生成一个随机字符串盐,并将它与登录页面一起发送到客户端。页面上的 JavaScript 代码计算输入密码的哈希值,连接盐并计算整个字符串的哈希值。该值在 POST 请求中发送到服务器。
然后服务器从数据库中检索用户的散列密码,连接相同的盐并计算散列。如果用户输入了正确的密码,这两个哈希值应该匹配。
现在,POST 请求将包含密码的加盐哈希值,而明文密码将不会出现在内存中
SHA 256 是当今可用的强大散列算法 - JavaScript 中的现成实现可用并在“良好阅读”部分引用。
注意:对于包含敏感信息的页面或在数据库中可以修改数据的页面,使用 JavaScript 来刷新浏览器的内存
和图像如下。

另外,我可以解决花旗银行在其网站上为客户所做的事情。我登录了网站并在转储中看到我的用户名被屏蔽了(如网站中所示),我也需要对密码字段执行相同操作的内容。有人可以解释我该怎么做吗?

您所建议的内容存在严重的安全缺陷。如果您在浏览器上计算哈希值然后发送到服务器(没有密码),那么服务器将无法相信浏览器实际上计算了哈希值。黑客可能只是读取了哈希值文件并构造了一个程序来发送哈希值。安全性来自于服务器(受信任的环境)拥有无法从哈希中猜出的密码,然后向自己证明密码产生哈希值。
如果您同时发送哈希值和密码,那么您还没有解决密码以明文形式提供的问题。
如果您对密码进行多次哈希处理,似乎有一种方法。您可以在浏览器上对密码进行一次(或多次)哈希处理,并将其用于服务器上的后续哈希调用。多次散列似乎很正常(尽管尚不清楚这到底在多大程度上使其更安全)。关键是浏览器将保存一个中间值,该中间值不会告诉您用户输入的密码。但是,它仍然会告诉您需要发送到服务器以验证用户身份的值。该值实际上是密码的代理,并且可以在调用服务器时用作密码。但是......这不是用户输入的密码。
最后一种方法看起来可能可行:使用非对称加密。服务器提供盐值和公钥。密码使用公钥加密,只能使用服务器上保存的私钥解密。由于盐值在每个会话中都会发生变化,因此内存中保存的加密值本身将无法在另一个会话中使用。服务器解密该值,提取盐,为其提供密码以继续进行密码身份验证。
| 归档时间: |
|
| 查看次数: |
7852 次 |
| 最近记录: |