将散列密码存储在PHP代码中,是否安全


Storing Hashed Passwords in PHP Code,Is it secure?

我需要一個僅顯示給授權 uses.so 我計劃使用課程的頁面。只有一个用户,密码不会更改。所以我打算做这样的事情

<?php
session_start();
if(isset($_POST['password']) )
{
    if($_POST['password']=="myhashedpassword" )
    {
        // auth okay, setup session
        $_SESSION['user'] = $_POST['username'];
        // redirect to required page
        header( "Location: index.php" );
     } else {
        // didn't auth go back to loginform
        header( "Location: loginform.html" );
     }
 } else {
     // username and password not given so go back to login
     header( "Location: loginform.html" );
 }
?>

我想知道这种方法的安全性。我不需要完全的安全性。希望它公平。

我说不这样做的三个原因:

  1. 您正在将纯文本密码 ( $_POST['password'] ) 与常量字符串进行比较。即使常量字符串经过哈希处理,您的密码也不会,因此您现在有效地将哈希视为密码。传递哈希。
  2. 定时攻击。
  3. 使用 == 比较 PHP 中的哈希会导致不可预知的结果。
总的来说,

我认为这会令人皱眉,但它并非完全不安全,因为他们没有看到明文密码。它消除了某人访问数据库以获取哈希值然后尝试暴力破解它的需要。所以更容易一些。

此外,如果($_POST['password']=="myhashedpassword"),这将不起作用,因为您正在将散列密码与帖子中的明文密码进行比较。所以你真的需要做

if( hash_algo($_POST['password']) == "myhashedpassword" ){//stuff}

我的建议是将其作为普通身份验证,或者向有权访问该页面的用户帐户添加一个标志并对其进行检查。

切勿对密码进行硬编码。其中一些原因是:

  • 保持源代码的秘密比密钥更难。
  • 您站点中允许读取源代码的任何漏洞都可能泄露密码。
  • 来自开发的密码最终将用于生产。
  • 如果不重新部署就不可能更改密码(您说它不会更改,但是如果发生违规,该怎么办?