【问题标题】:How to store a password without a database (PHP)?如何在没有数据库(PHP)的情况下存储密码?
【发布时间】:2011-06-13 13:12:18
【问题描述】:

我想要一个需要密码才能登录但没有数据库的页面。

我正在考虑在页面中对其进行硬编码,即:

$password = "something"

或者将其加密并存储在文本文件中?

感谢任何建议。

【问题讨论】:

  • 另外——谁能告诉我为什么在 PHP 脚本中硬编码是不安全的,因为没有人可以查看源代码?
  • 我的回答至少解决了一种可能导致这种情况发生的情况。
  • 您打算存储多少个密码?只是一个密码还是数百个用户?从问题来看,您似乎想存储一个密码。

标签: php password-storage


【解决方案1】:

您可以使用 PHP 的 md5 加密库来加密密码,然后将其存储在文本文件中。由于 md5 不可逆,因此密码是安全的。

您绝对不想以纯文本形式存储。

您也可以将密码存储在 PHP 文件中,但使用加密的哈希。该文件的优点是数据与业务逻辑分离,这可以使添加数据库或使用多个用户/密码的能力稍微容易一些。

更新:如果您将密码以纯文本形式存储在未加密的 PHP 脚本中,那么任何入侵您的服务器或有权访问服务器的人都可以读取您的纯文本 PHP 文件的内容。

【讨论】:

    【解决方案2】:

    如果它不在数据库中,我倾向于将它存储在服务器 webroot 之外的文本文件中。如果您将其存储在 php 脚本中,并且服务器配置出现问题,则 php 脚本可能会以纯文本形式提供,而不是通过 php 解析,因此密码将是可见的。当然,在正常情况下,这不太可能发生,但这是一个可能的风险。加密它可能会有所帮助,但您还必须将解密密钥存储在某个地方,因此对某人解密它只会带来一点不便。最好以散列格式(例如 MD5 或 SHA-1)存储密码,使用相同的方法对用户输入的密码进行散列,然后比较散列。

    【讨论】:

    • 谢谢。想知道将它存储在脚本本身中有什么问题。
    【解决方案3】:

    你可以做其中任何一个。只要确保存储密码的哈希值,而不是真正的安全密码。这是一个非常简单的例子。

    <?
        if(md5($_REQUEST['password']) == 'md5ofyourpasswordHERE'){
             //do your logged in page stuff here.
        } else {
             //kick them out or tell them to resupply password.
        }
    ?>
    

    如果这对您很重要,您还可以检查用户名。

    希望有帮助!

    【讨论】:

      【解决方案4】:

      如果你想存储在文本文件中或在 php 脚本中硬编码,我会推荐散列它

      • 第一个echo sha1('your password');
      • 结果字符串(不可读)复制并粘贴到脚本或文本文件中
      • 比较时使用if ( sha1($password) == '543f3fc32c232c32') ...

      你也可以使用 md5 进行散列

      这两种方法都是一种加密方式,因此“请确保您记住您的密码”

      【讨论】:

        猜你喜欢
        • 2011-08-31
        • 1970-01-01
        • 1970-01-01
        • 2017-07-26
        • 1970-01-01
        • 2011-08-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多