【问题标题】:Send a form with a hashed password发送带有哈希密码的表单
【发布时间】:2015-03-02 06:00:21
【问题描述】:

我需要提交一个带有密码“哈希”功能的表单。问题是,如何通过哈希值更改密码文本框的初始值以插入数据库?

我理解以下内容。当我单击提交按钮时,表单会将文本框的值发送到 php 文件。特别是,正如我之前所说,我需要发送新的哈希密码而不是原始值。

如果我不是很清楚,我很抱歉,但我对此很原始。

提前谢谢你

我正在使用的部分代码是下一个:

...
<input type="password" id="upwd" name="upwd" onChange="validatePassword()">
<input id="submit" type="submit" value="Sign up!" onsubmit="sending()">
...
<script>
...
function sending () {
    z = document.getElementById("upwd").value;
    upwd = hashCode();
} 

function hashCode() {
var hash = 0;
if (z.length === 0) return hash;
for (var i = 0; i < z.length; i++) {
var character = z.charCodeAt(i);
hash = ((hash<<5)-hash)+character;
hash &= hash; // Convert to 32bit integer
}
    return hash;
}
</script>

【问题讨论】:

    标签: forms validation hash passwords


    【解决方案1】:

    密码散列是在服务器端完成的,在您的情况下是在 PHP 脚本中。您可以使用 PHP 函数 password_hash() 来计算安全的 BCrypt 哈希。

    如果您计算哈希客户端,ManInTheMiddle 将看到密码哈希,并可以直接使用它来访问用户帐户。哈希将成为实际密码。

    密码散列是针对攻击者对您的数据库具有读取权限的情况进行的。在这种情况下,他会看到哈希,但仍然不知道真正的密码。如果没有真实密码,他将无法使用该用户帐户。

    【讨论】:

    • 好的。我明白,但在这种情况下,我必须在客户端进行。
    • @VíctorFernándezPousa - 我很想知道为什么这必须在客户端完成,你想达到什么目的?散列可以在客户端完成,但至少也需要计算一个简单的散列服务器端。请查看此answer 了解更多详情。
    猜你喜欢
    • 2016-05-18
    • 1970-01-01
    • 2018-10-29
    • 2013-04-13
    • 2021-03-15
    • 2015-05-26
    • 2016-05-12
    • 2010-12-03
    • 1970-01-01
    相关资源
    最近更新 更多