как отредактировать .htpasswd, использующий php?

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

sample users
kevien : kka
mike : mike

И позвольте, говорят, что я хочу изменить kevien на XYZ

И то же самое переходит к паролю

7
задан Mahmoud 8 June 2010 в 04:06
поделиться

3 ответа

Конечно, это просто пример, который прочитает ваш текущий файл, найдет заданное имя пользователя и изменит либо пароль, либо имя пользователя.

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

    $username = $_POST['user'];
    $password = $_POST['pass'];
    $new_username = $_POST['newuser'];
    $new_password = $_POST['newpass'];
    $action = $_POST['action'];
    //read the file into an array
    $lines = explode("\n", file_get_contents('.htpasswd'));

    //read the array and change the data if found
    $new_file = "";
    foreach($lines as $line)
    {
        $line = preg_replace('/\s+/','',$line); // remove spaces
        if ($line) {
            list($user, $pass) = split(":", $line, 2);
            if ($user == $username) {
                if ($action == "password") {
                    $new_file .= $user.':'.$new_password."\n";
                } else {
                    $new_file .= $new_username.':'.$pass."\n";
                }
            } else {
                $new_file .= $user.':'.$pass."\n";
            }
        }
    }

    //save the information
    $f=fopen(".htpasswd","w") or die("couldn't open the file");
    fwrite($f,$new_file);
    fclose($f);
4
ответ дан 6 December 2019 в 11:46
поделиться

Don't. Храните свой authdb в базе данных, например, с помощью mod_auth_mysql.

4
ответ дан 6 December 2019 в 11:46
поделиться

Погуглил "php generate htpasswd", получил эту статью: Как создать пароль для файла .htpasswd с помощью PHP .

Ключевая строка выглядит так:

$password = crypt($clearTextPassword, base64_encode($clearTextPassword));

Итак, я предполагаю, что вы читали бы содержимое файла с помощью file_get_contents , разобрали его в ассоциативный массив, изменили соответствующие записи (зашифровав пароль, как показано выше), запишите массив обратно в строку и используйте file_put_contents , чтобы записать файл обратно.

Однако это определенно не стандартная практика. Похоже на работу с базой данных. Если вам кажется странным настраивать весь сервер базы данных, и ваш хост поддерживает это, SQLite может быть хорошим выбором.

3
ответ дан 6 December 2019 в 11:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: