我知道,出于安全原因,有必要散列(加盐)用户密码并将其与存储的散列密码进行比较,因此如果其他人获得散列字符串,他将无法计算回密码或在彩虹表中查找。
方法的一部分我不明白。假设我有这个标准的登录表单
<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
负责对数据库进行身份验证并返回 true/false。 (我制作了这个对象,我有真正有用的对象来做这个)
但这意味着 POST request
中的密码原始、未散列且不安全地旅行!任何人都可能截获真正的密码!
所以我的想法是,我应该在发送密码之前使用 javascript 对密码进行哈希处理。我会有一个隐藏字段 <input type='hidden' name='real_password' value='' />
并让 javaScript 复制名为 password 的输入的值,对其进行哈希处理,将其放入 real_password 隐藏输入中并空白密码字段。这样,POST request
会有哈希密码,而不是原始的、不安全的、原始的密码。
我说的对吗,还是我应该只在 php 上进行哈希处理?
最佳答案
散列法在服务器端保护数据。要保护到服务器的数据流,请使用 HTTPS。在这方面,密码或其哈希值是否在网络上被盗(以及后来被复制)都没有关系。 HTTPS 还授予证书以确保在用户的浏览器中显示一个挂锁(切记不要在没有适当证书的情况下在页面中输入重要密码)。
关于php - 使用 PHP 和 javaScript 的登录解决方案的密码散列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13281385/