使用文本文件创建登录

时间:2010-01-07 00:08:44

标签: php authentication

我正在尝试为一个或两个用户创建一个非常简单的登录,用户名和密码存储在“admin.txt”中,文本文件的格式如下: 用户名 密码 __ 我似乎没有用户名和密码注册...感谢您的帮助!!

        // username and password sent from form 
       $myusername=$_POST['username']; 
       $mypassword=$_POST['password'];



        $sql = fopen("../admin8183/users/admin.txt", "r");

                    while (!feof($sql)) {
                      $myusername = fgets($sql);
                      $mypassword = fgets($sql);
                      $line = fgets($sql);



         $myusername = trim($myusername);
         $mypassword = trim($mypassword);

                }
            //  counting  rows
         $admin=count(file("../admin8183/users/admin.txt"));

           if($admin==1){
        // Register $myusername, $mypassword and redirect to file "sendmessage.php"
         session_register("myusername");
         session_register("mypassword"); 
          header("location:sendmessage.php");
             }
              else {
            echo "Wrong Username or Password";
              }

P.S。我确信我的代码有一些问题,并且有更有效的方法来实现我的目标,这是我第一次尝试在php中创建登录... 谢谢你的帮助!

3 个答案:

答案 0 :(得分:2)

此脚本存在多个问题:

  • $ myusername,$ mypassword - 首先从$ _POST数据初始化这些变量,然后用文件内容覆盖。我没有看到用户提交的密码与文件中的密码有关。
  • 密码文件正在加载两次 - 一次通过fopen / fgets再次通过文件加载。这很浪费 - 只通过文件()
  • 加载文件一次
  • 以下行:$admin=count(file("../admin8183/users/admin.txt")); ... if($admin==1)只要密码文件只包含一行,就允许任何人访问。如果用户名/密码位于不同的行,则永远不会发生这种情况。更糟糕的是,此检查与用户输入无关。
  • 密码正在会话中保存。至少,如果用户名和密码正确,则应将名为$_SESSION['logged_in']的会话变量设置为true。
  • 密码是否以加密格式存储?密码至少应存储为SHA1 / MD5哈希值。
  • session_register已弃用。

构建安全的用户身份验证方案很难。正如其他人所说,尝试使用基本的Apache身份验证。这是一个不错的教程:

http://www.nexcess.net/support/tutorials/misc-tools/htaccess-authentication/

答案 1 :(得分:1)

首先,我必须说这是完成任务的错误方法,使用htpasswd的评论提议是非常正确的。

至于你的代码:

  1. $myusername和文件中读取时,您使用相同的$_POST变量。您需要使用单独的变量并进行比较。
  2. 您希望文件有3行(3个获取),但只有在有1行时才能注册)
  3. <强>更新

    由于您无法使用htpasswd,我强烈建议您使用哈希密码。无论是将其保存在文件中还是硬编码,都是一种很好的做法。正如@silky指出的那样,sha1 / md5并不比纯文本好,所以这里是sha256 for PHP的实现。

    另外,请不要在sezoion中保存您的密码/用户名,因为@ pygorex1指出,使用另一个变量将用户标记为已登录。

答案 2 :(得分:0)

好吧,看起来fgets()会得到一整行:http://php.net/manual/en/function.fgets.php

因此,您要将整行username password放入$mysuername,然后将下一行放入$mypassword,依此类推。