Сопоставление пароля с локальным именем файла - PullRequest
0 голосов
/ 03 мая 2018

Я знаю, что это плохая практика. Это временно, пока я не получу эти пароли в среду AD. Суть в том, что я пытаюсь заставить пароль работать, и мне кажется, что я что-то упустил.

По сути, у меня есть файл .secrets, который содержит пароли в следующем формате:

user1:pass1
user2:pass2
etc, etc

Вот весь PHP-файл:

<code><?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 "
"; ?> ">

Пользователь:

Пароль:

Подтвердите пароль:

проверка функции (вход) { if (input.value! = document.getElementById ('password'). value) { input.setCustomValidity ('Пароль должен совпадать.'); } еще { // ввод действителен - сбросить сообщение об ошибке input.setCustomValidity ( ''); } }

Секретное слово:

Единственная часть, которая не работает, - это сопоставление и тот факт, что в нем не написано «Совпадение» или «Не совпадает». Я чувствую, что я так близко к этому, но я пытался заставить это работать в течение последних 30 минут. Кстати, я пытаюсь сопоставить имя пользователя и "секретное слово", а не поле пароля, кстати.

Выход print_r:

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

Спасибо заранее.

1 Ответ

0 голосов
/ 03 мая 2018

Похоже, вы открыли файл для чтения, но на самом деле не приступили к чтению файла.

Я решил использовать 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";
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...