PHP读取txt文件并检查是否存在用户名密码

时间:2013-03-03 18:54:43

标签: php authentication session-variables plaintext

我有一堆密码和用户名存储在txt文件中,我需要检查匹配项。我知道这不是一种安全的方法,而是用于倾斜目的。

此代码将用户名和密码写入txt文件

  if(isset($_POST['register'])) //  
   {
    $user  = $_POST['username'];
    $password=$_POST['password'].PHP_EOL;
    $fh = fopen("file.txt","a+");
    fwrite($fh,$user." ".$password); //write to txtfile

    fclose($fh);
 }

这是我遇到问题的代码。

用户名和密码在结果

中存储如下
      username1 passwords1 username2 password2 etc. 

所以我需要检查result [0] = userinput是否存在,如果存在则检查result [1] = passwordInput等等。

   if(isset($_POST['Logg']))
   {
   //$_SESSION['username']=$user; 
   //$_SESSION['password']=$password;

    $file = file_get_contents("file.txt"); // Returns a string

    $result = explode(" ",$file);
    $boolC= false;

    for($i=0; $i< count($result); $i++)
    {
   if($result[$i] === $user)
   {
    $boolC=true;
    $i =$i+1; 
    if($boolC === true)
    {
        if($result[$i]===$password)
        {
            echo 'Password and Username Correct';
        }
    }

   }
     }

  }

3 个答案:

答案 0 :(得分:1)

在您继续尝试更正此代码之前,我强烈建议您远离将密码存储在纯文本文件中。这是你系统中一个巨大的安全漏洞。

我可以看到的另一个架构问题是,如果用户名或密码中包含空格,则代码将失败。您可能应该使用行跳转作为分隔符(\ n)。

答案 1 :(得分:1)

考虑在密码中有空格以及任何符号的可能性。也许你应该拆分换行符(“\ n”)。

if( $result[$i] === $user && $result[$i+1] === $password )

声明的第一部分必须适用于要评估的第二部分。 $ i变量永远不会改变

$file = "username1 passwords1 username2 password2";
$result = explode(" ",$file);
$user = "username1";
$password = "passwords1";

for($i=0; $i< count($result); $i++){

    if($result[$i] === $user && $result[$i+1] === $password)
    {

        echo 'Password and Username Correct';
   }
}

答案 2 :(得分:0)

我认为原帖的逻辑没有错。

您应该打印所有变量以检查它们是否保持正确的值。

“$ user”和“$ password”变量是全局的,因为它们在另一个if的括号内是不可知的,即在你检查$ _POST ['logg']的块中