【问题标题】:php checkin if username and password are correct from .txt file [closed]如果.txt文件中的用户名和密码正确,则php签入[关闭]
【发布时间】:2017-07-31 22:52:13
【问题描述】:

我有一个 users.txt 文件,其中用户名和密码以这种格式存储(出于教育目的,它必须位于 .txt 文件中):
用户名1:密码1
用户名2:密码2

密码使用 md5 加密。我还有一个登录页面,用户在其中输入用户名和密码。我的问题是,如何检查用户输入的用户名和密码是否正确?

【问题讨论】:

  • 您自己尝试过什么解决方法?
  • 仅使用散列函数是不够的,仅添加盐对提高安全性无济于事。相反,iIterate over an HMAC with a random salt for about 100ms duration and save the salt with the hash.使用PBKDF2Rfc2898DeriveBytespassword_hashBcrypt等函数和类似函数。关键是让攻击者花费大量时间通过蛮力寻找密码。
  • MD5 不是加密,它是一个弱加密散列。加密哈希是一种单向函数,不可能反转操作。加密是一个可逆的函数,并且有一个加密和解密所需的密钥。
  • 我最近开始学习 PHP。正如我所写的那样,该项目用于教育目的,不会在现场环境中使用。我在网上寻找解决方案,但找不到解决方案,所以我在这里提出问题。
  • 安全性对于这个项目并不重要,因为除了我的 WAMP 服务器用于学习之外,它不会在任何地方使用。我只需要知道如何检查用户输入的用户名和密码是否正确。

标签: php login passwords


【解决方案1】:

为了安全起见,应使用不可逆的方法保存密码。当需要保存密码时,将其以不可逆功能编码并存储。当需要验证密码时,它会再次使用不可逆函数进行编码,并将结果与​​存储的版本进行比较。

在 PHP 中很简单,只需在存储密码时使用 password_hash,在验证密码时使用 password_verify。这是一种非常安全的方法。

【讨论】:

    【解决方案2】:

    你可以这样做:

    <?php
    $user_input = $_POST['user'];
    $password_input = md5($_POST['pass']);
    
    $file = fopen('users.txt', 'r');
    
    while(!feof($file)){
        $line = fgets($file);
        list($user, $password) = explode(':', $line);
        if(trim($user) == $user_input && trim($password) == $password_input){
            echo 'Logged in';
            break;
        }
    }
    fclose($file);
    

    使用此代码,您的文件将被逐行读取,在每一行中,用户和密码都通过此代码获得:list($user, $password) = explode(':', $line);,然后代码将检查它们是否等于用户输入。如果用户名和密码正确,那么你会得到一个Logged in message 并且文件被关闭。

    【讨论】:

    • 如果用户名和密码正确,则可以完美运行,但如果用户名或密码不正确,我会收到错误消息。如何显示用户名或密码不正确的消息?
    • @bux “我如何显示用户名或密码不正确的消息?” 老实说; if/else
    • @bux 假设用户名是唯一的,您可以在 while 内的 if 中添加 elseif 条件:elseif(trim($user) == $user_input){ echo 'Username/password is incorrect'; break; }
    猜你喜欢
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多