我知道,出于安全原因,有必要对用户的密码进行散列(使用盐)并将其与存储的散列密码进行比较,因此如果其他人获得散列字符串,他将无法计算回密码或查看把它放在彩虹桌上。
该方法有一部分我不明白。假设我有这个标准的登录表单
<form method='post' action='login.php'>
<input type='text' name='user' />
<input type='password' name='password' />
<input type='submit' name='submit' value='login' />
</form>
然后我使用 PHP 登录
<?php
if(isset($_POST['submit'])){
$username = $_POST['username'];
$password = sha1($_POST['password']);
$authorize = $login_object->login($username, $password);
}
?>
并且,在幕后,$login_object
负责对数据库进行身份验证并返回真/假。(我做了这个对象,我有真正有用的对象来做这个)
但这意味着POST request
原始旅行中的密码,未经哈希处理且不安全!任何人都可以截获真正的密码!
所以我在想的是我应该在发送密码之前使用javascript对密码进行哈希处理。我将有一个隐藏字段<input type='hidden' name='real_password' value='' />
并让 javaScript 复制名为密码的输入的值,对其进行哈希处理,将其放入 real_password 隐藏输入中并将密码字段空白。这样,POST request
将拥有散列密码,而不是原始的、不安全的原始密码。
我对我所说的是否正确,或者我应该只对 php 进行哈希处理?