PHP сравнивает две строки пароля

Я использую explode() для преобразования строки, прочитанной из текстового файла, в массив, который я использую для сравнения с вводом от пользователя.

Текстовый файл содержит:

 user#test //user= username test= password

Когда я пытаюсь использовать strcmp(), он возвращает -1, хотя печать двух строковых переменных приводит к выводу

test||test
=-1

который я печатаю с:

if(isset($user_details[1])){
$user_details = explode('#', $user);     //   $user is text file
$passW = $_GET['password'];              //   input: "test"
$tesPW = user_details[1];
printf($passW."||".$testPW."=".strcmp($passW,$testPW));
}

2 ответа

Решение

Предполагая, что это простое приложение для избранной группы людей в ограниченной среде, я не буду комментировать вопросы безопасности, связанные с этим методом.

Эта функция вернет true если пользователь / пароль соответствует строке в файле, false если не.

//Assumes const USERACCOUNTFILE defines the path to the file
function AuthenticateUser ($username, $password) {
    $handle = @fopen(USERACCOUNTFILE, "r"); //Open the file for reading
    if ($handle) {
        while(($line = fgets($handle)) !== false) { //Read each line of the file
            $line = explode('#', $line); //Split the line
            if($line && count($line) == 2) { //Does the line have the expected number of values?
                //Compare the values minus all whitespace
                if(trim($line[0], "\r\n\t ") == $username && trim($line[1], "\r\n\t ") == $password) {
                    fclose($handle);
                    return true; //Found a match
                }
            }
        }
    }
    fclose($handle);
    return false; //None matched
}

Вы также можете использовать trim($line[0]) без необязательного параметра "\r\n\t "в качестве параметра по умолчанию достаточно.

Если strcmp возвращает -1 из-за того, что $passW меньше, чем $ testPW http://php.net/manual/en/function.strcmp.php.

Если у $ user есть строка "user#test //user= username test= password" и вы делаете $user_details = explode('#', $user); у вас есть в user_details[1]; строка "test //user= username test= password";

Другие вопросы по тегам