【问题标题】:Storing Hashed Passwords in PHP Code,Is it secure?在 PHP 代码中存储散列密码,它安全吗?
【发布时间】:2016-03-01 12:47:40
【问题描述】:

我需要一个只显示给授权用户的页面。所以我计划使用会话。 只有一个用户,密码不会改变。所以我打算做这样的事情

<?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" );
 }

?>

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

【问题讨论】:

  • 如果您将鼠标悬停在安全标签上,您将看到以下文本:“如果您的问题不是关于特定的编程问题,请考虑改为在 Security.SE 上提问:security.stackexchange.com
  • 没有定义它不安全!
  • @bub 什么不是?为什么?
  • 首先你需要优化你的代码。
  • 如果您只有一个用户,为什么不直接使用.htaccess.htpasswd?这本身就很安全。

标签: php security login


【解决方案1】:

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

  1. 您将明文密码 ($_POST['password']) 与常量字符串进行比较。即使对常量字符串进行哈希处理,您的密码也不会,因此您现在有效地将哈希值视为密码。 Pass the hash
  2. Timing attacks.
  3. Using == to compare hashes in PHP 会导致不可预知的结果。

【讨论】:

  • 感谢您的回答。我是唯一将使用此功能的人。我需要使用它来轻松地向数据库添加一些值,而无需通过 phpmyadmin 手动执行此操作。页面不会公开。我会将== 替换为strcmp。您对此有什么建议吗?
  • password_verify($yourPassword, $aBcryptSaltedHashOfYourPassword).
【解决方案2】:

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

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

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

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

【讨论】:

  • 感谢您的回答。这不是工作代码,只是一个演示。我是唯一将登录到此页面的人,将条目添加到 db。希望这种方法足够安全.
  • "但也不是完全不安全" 定时攻击。 :|
  • @ScottArciszewski “并非完全不安全,因为他们没有看到明文密码”是该声明的重点。是的,鉴于此设置不安全,因此还有暴力攻击和其他攻击。但是,Timing 攻击更多的是针对哈希算法,而不是我认为的代码实现。
  • 查看我的答案以获得更深入的解释。 ;P
  • @ScottArciszewski 这篇文章非常棒,我现在对定时攻击有了更深入的了解。
【解决方案3】:

永远不要硬编码密码。一些原因是:

  • 源代码保密比密钥更难。
  • 您网站中任何允许读取源代码的漏洞都可能泄露密码。
  • 来自开发的密码最终将用于生产。
  • 不重新部署就无法更改密码(你说不会更改,但万一被破解怎么办?)。

【讨论】:

  • 我不会存储纯文本密码。我会计算哈希并存储它。
  • 问题是......如果网站被破坏......一切都被破坏......所以我不是在谈论那种安全级别:)
猜你喜欢
  • 1970-01-01
  • 2010-12-06
  • 2010-11-28
  • 1970-01-01
  • 2013-07-25
  • 1970-01-01
  • 2011-12-29
  • 2013-10-16
  • 2011-09-28
相关资源
最近更新 更多