|
|
|
| Привет.
Мой сайт использует авторизацию с помощью .htaccess для защиты админской страницы. Пароль хранится в .htpasswd в виде MD5-hash. По идее, это должно быть достаточно безопасно при условии хорошего пароля. Хочется, чтобы пароль можно было бы поменять из формы, а не вручную. Есть какие-нибудь идеи, как это удобно сделать? Перезаписывать непосредственно .htpasswd? А какой у него формат?
Спасибо за уастие. | |
|
|
|
|
|
|
|
для: Timmy
(21.02.2005 в 01:57)
| | Формат .htpasswd
Имя_пользователя:хеш_пароля
|
Если пользователей несколько, то каждя пара логин/хеш пароля пишется с новой строки
admin1:$apr1$RH3.....$jgtaKf3S.hVw55K22gYm.0
user:$apr1$7s2.....$EFhgkQ5sd6QDumS0lmzoW.
elena:$apr1$1h3.....$4tOoDRmegLkiDNj3gOg/e1
|
| |
|
|
|
|
|
|
|
для: glsv (Дизайнер)
(21.02.2005 в 02:08)
| | А что это за хеш?
$apr1$ вроде везде одинаковое... А то, что дальше - непонятно. Пробовал один и тот же пароль "шифровать" MD5 htpasswd.exe с ключом -m, и в MySQL функцией MD5. В htpasswd получилось
admin:$apr1$m/1.....$EI3q/7cCkiUydDjYj9wge0
|
а в MySQL
fd25615e0291496a3225f25749a6cfc0
|
Что с этим всем делать - непонятно. | |
|
|
|
|
|
|
|
для: Timmy
(21.02.2005 в 21:49)
| | Все молчат, как пленные партизаны. придется отвечать самому.
В файле .htpasswd после двоеточия лежит хэш-код пароля. Какой именно хэш-код, определяется операционкой, на которой функционирует сайт, и параметрами, с которыми был вызван htpasswd. Возможны следующие варианты:
1. MD5. При этом используется не стандартные вариант, который используют, скажем, PHP и MySQL, а некоторая особая вариация для Apache. PHP такой делать не умеет.
2. SHA. Тоже не подходит для наших целей, т.к. PHP умеет генерировать только SHA1.
3. Некоторый стандартный хэш, генерируемый системным вызовом crypt(). Внимание! В виндах такого вызова нету, в виндах такого не бывает. Зато в виндах бывает
4. пароль без хэширования. То есть в .htpasswd записано просто admin:password. Такое бывает только в виндах.
В итоге имеем, что для того, чтобы из PHP создать .htpasswd с нужным логином/паролем, нужно либо (в виндах) записать его в явном виде, или (в *nix) использовать стандартный crypt(). Его можно вызвать из PHP в виде crypt(string, salt), где string - это строка, хэш код которой мы хотим получить. Что такое salt не очень важно, скажем только, что это некоторый строковый параметр, использующийся при хэшировании.
Теперь все наши знания суммируем в виде функции:
function change_password($login, $pass, $filename){
if(!$file = fopen($filename, 'w')){
die("Could not open a file");
}
$hash = crypt($pass, md5($login));
if(!fwrite($file, $login.':'.$hash)){
die("Could not write file");
}
}
|
Эта функция принимает на вход 3 строки - логин, пароль и имя файла .htpasswd.
Подробно описывать работу функции не имеет смысла, она элементарная.
Не гарантирую, что это будет работать в любой системе, или на любом хостинге. Более того, это точно не будет работать в виндах. Но у меня на хостинге - (реклама) atlex.ru - работает.
Текст не претендует на правильность и тем более на новизну информации. Используйте на свой страх и риск. | |
|
|
|
|
|
|
|
для: Timmy
(22.02.2005 в 00:46)
| | Вот и здорово!
Меня самого этот вопрос немного мучал, но времени обстоятельно разобраться не было.
Спасибо :) | |
|
|
|