.htpasswd — Удаление неизвестной части строки. Переполнение стека.

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

Прямо сейчас я просто добавляю текущий файл, вот так:

    $user = ''; // (Not an empty strings just removed the part that grabs this for security reasons)
$password = ''; // (Not an empty strings just removed the part that grabs this for security reasons)
$password = crypt($password, base64_encode($password));
$line = $user . ':' . $password;
$fh = fopen('path/to/password/file','a');
fwrite($fh,$line);
fclose($fh);

Однако я хотел бы удалить любую текущую запись об этом человеке. Например, если бы я знал их старый пароль pass123Я бы просто использовал str_replace($user . ':' . 'pass123','',$currentfiledata), но я не, и у меня нет возможности хранить его.

Как я смогу сделать это? Я предполагаю, используя preg_replace или что-то подобное, но я не испытал этого.

0

Решение

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

если ты должен сделать это таким образом, вы можете выполнить замену с помощью preg_replace() как показано ниже:

$currentfiledata = preg_replace('~^'.$user.':.*~m', '', $currentfiledata);

Вышеприведенный оператор ищет любую строку, которая начинается с (утверждается якорем ^) заданное имя пользователя, затем двоеточие, а затем пароль (обозначенный .* здесь — означает любой символ, повторяется ноль или более раз). Совпадения заменяются пустой строкой.

1

Другие решения

Других решений пока нет …