php - 使用 PHP 和 javaScript 的登录解决方案的密码散列

标签 php javascript authentication

我知道,出于安全原因,有必要散列(加盐)用户密码并将其与存储的散列密码进行比较,因此如果其他人获得散列字符串,他将无法计算回密码或在彩虹表中查找。

方法的一部分我不明白。假设我有这个标准的登录表单

<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/

相关文章:

php - UTF8 与 php pear DB 包不起作用

java - Java/PHP 桥接 API 中的错误

php - 净 :err_connection_reset after loading php file completely

javascript - Grails从 View 访问 Controller 值

javascript - 当通过鼠标操作更改浏览器文本输入时使用react

ajax - 如何让浏览器提示保存密码?

php - 加载特定 MySQL 记录时发生 fatal error

javascript - Angularjs 组织/结构化状态

ruby-on-rails - 设计与 devise_token_auth : How to handle authentication for both a web app and API

r - 使用 RGoogleDocs 登录谷歌电子表格