匹配本地文件名

时间:2018-05-03 02:39:10

标签: php string authentication

我知道这是不好的做法。在将这些密码放入AD环境之前,这是暂时的。关键是,我试图让密码匹配工作,看起来我错过了什么。

基本上,我有一个.secrets文件,其中包含以下格式的密码:

user1:pass1
user2:pass2
etc, etc

以下是整个PHP文件:

<?php

//If Submit Button Is Clicked Do the Following
if ($_POST['submit']){
  $username = $_POST['username'];
  $secret_word = $_POST['secret_word'];
  $password = $_POST['password'];

  $fh = fopen('.secrets','r');
  $result = explode(":",$fh);
  for($i=0; $i< count($result); $i++){
    if($result[$i] === $username && $result[$i+1] === $secret_word) {
      echo "Matched";
      break;
    } else {
        echo "Secret Word Incorrect - Please try again";
        break;
    }
  }
  fclose($fh);
}

echo "<pre>";
print_r($_POST);
echo "</pre>";

?>

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>">
<p>User:</p>
<input name="username" required="required" type="text" id="username" />
<p>Password:</p>
<input name="password" required="required" type="password" id="password" />
<p>Confirm Password:</p>
<input name="password_confirm" required="required" type="password" id="password_confirm" oninput="check(this)" />
<script language='javascript' type='text/javascript'>
    function check(input) {
        if (input.value != document.getElementById('password').value) {
            input.setCustomValidity('Password Must be Matching.');
        } else {
            // input is valid -- reset the error message
            input.setCustomValidity('');
        }
    }
</script>
<p>Secret Word:</p>
<input name="secret_word" type="password" required="required" id="secret_word" />
<p><input type="submit" name="submit" /></p>
</form>

唯一不起作用的部分是匹配以及它没有说&#34;匹配&#34;或&#34;不匹配&#34;。我觉得我已经接近这个了,但我一直试图在过去30分钟内让这个工作。 顺便说一下,顺便说一下,我试图匹配用户名和&#34; secret_word&#34;而不是密码字段。

print_r的输出:

Array
(
    [username] => user1
    [password] => asdf
    [password_confirm] => asdf
    [secret_word] => pass1
    [submit] => Submit
)

先谢谢。

1 个答案:

答案 0 :(得分:1)

您似乎打开了要读取的文件,但实际上并没有继续阅读该文件。

我选择使用PHP的file_get_contents()来减少冗长。

我接下来要做的就是先拆分行(\n),然后再拆分:。如果我们只是提前发送到:分割,那么您的某些数据会有新的上线 - 您也可以trim()离开。我刚刚选择了这种方法,因为它更清晰。

更新的代码如下所示:

if ($_POST['submit']){
  $username = $_POST['username'];
  $secret_word = $_POST['secret_word'];
  $password = $_POST['password'];

  $file = file_get_contents('.secrets');
  $lines = explode("\n", $file);

  $matched = false;

  for ($i = 0; $i < count($lines); $i++) {
    list($stored_user, $stored_pass) = explode(":", $lines[$i]);

    if ($stored_user === $username && $stored_pass === $secret_word) {
      $matched = true;
      break;
    }
  }

  if ($matched) {
    echo "Matched!";
  } else {
    echo "Secret Word Incorrect - Please try again";
  }
}