【发布时间】:2014-11-14 23:42:38
【问题描述】:
这可能是一个老问题,但我仍然没有找到这个问题的正确答案,所以请耐心等待。 我有一个 https 登录页面,它使用表单发布方法并将凭据发送到服务器......等等等等。
登录时,如果使用IE和F12进行网络监控,点击开始抓包。您可以看到一些类似于登录的 URL,servetloginauth(来自 gmail.com),您可以看到带有您的用户名和密码的请求正文。 好吧,有人可能会说,只有当用户没有注销时,你才能看到这一点。
现在注销并且不要关闭浏览器并从任务管理器中获取浏览器转储(任何浏览器,任何版本)(我不确定如何在 Mac 中执行相同操作)。 使用 WinHex 编辑器打开转储文件并搜索/查找:“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|<
我目前的解决方案如下,但我需要任何替代方案而无需付出太多努力。
密码可以从内存中读取,如果它被发送为 明文。使用加盐哈希技术进行密码传输 将解决此问题。散列是一种加密技术,其中 实际价值永远无法恢复。在盐渍哈希技术中, 密码作为哈希值存储在数据库中。服务器 生成一个随机字符串,盐,并将其与登录名一起发送 页面发送给客户端。页面上的 JavaScript 代码计算了 输入的密码,连接盐并计算哈希值 整个字符串。该值在 POST 请求中发送到服务器。
然后服务器从 数据库,连接相同的盐并计算哈希。如果用户 输入了正确的密码,这两个哈希值应该匹配。
现在,POST 请求将包含 密码和明文密码不会出现在内存中
SHA 256 是当今可用的强大哈希算法 - 现成的 JavaScript 中的实现可用并在“Good 阅读”部分。
注意:对于包含敏感信息的页面或包含数据的页面 可以在数据库中修改,使用JavaScript刷新内存 浏览
图片如下。
另外,我可以接受花旗银行在他们的网站上为他们的客户所做的一些事情。 我登录了网站,在转储中我看到我的用户名被屏蔽了(因为它出现在网站上),我也需要对密码字段做同样的事情。有人可以解释一下我该怎么做吗?
【问题讨论】: