Как в апаче включить MD5 для .htpasswd ?

12
Boris A Dolgov
На сайте с 04.07.2007
Offline
215
#11
SellingFeis:
Вот если кому пригодится скрипт администрирования файла .htpasswd из php

Под линукс, с некоторыми дополнениями

<?
$password=trim($_POST['password']); // пароль
$login=trim($_POST['login']); // логин
$addr=trim($_POST['addr']); // путь k htpasswd
$url='htpasswd -b'; // на большинстве linux-серверов - такой. можно приписать -m для md5-паролей, -d - для crypt() паролей, -s - sha -p - простой текст.
if (!$addr) { $addr=$ENV['DOCUMENT_ROOT'].'/.htpasswd'; }; // если путь не передан, пишем в текущую директорию
if($password&&$login)
{
$cmd=$url.' "'.$addr.'" "'.$login.'" "'.$password.'"'; //команда
if(system($cmd)) { echo "OK";} else { echo "FAIL"; };//выполняем
}
?>

Boris A Dolgov добавил 28.05.2008 в 09:20

Если кто-то допишет к логину и паролю замены " на \" и выложит - буду благодарен :)

С уважением, Борис Долгов. Администрирование, дешевые лицензии ISPsystem, Parallels, cPanel, DirectAdmin, скины, SSL - ISPlicense.ru (http://www.isplicense.ru/?from=4926)
SF
На сайте с 11.10.2005
Offline
137
#12

В догонку, насчет безопасности...

Данные полученные из внешних источников, перед тем как сувать в system() надо обрабатывать функцией escapeshellcmd()

эта функция защитит ваш скрипт от возможных иньекций

	$password=escapeshellcmd(trim($_POST['password']));

$login=escapeshellcmd(trim($_POST['login']));
Инструкция: Как Правильно Делать Сайты: Домен, Хостинг, Установка CMS (http://www.3sd.ru/kak-delat-site/index.php).
Thats right
На сайте с 29.08.2005
Offline
84
#13


<?
function makehtaccess() {
global $Cfg;
connect();
$users = mysql_query("select username,pass from users where access > '0'") or die ("Can't get users (makehtaccess)");
$num = mysql_numrows($users);
$t = 0;
if ($num != 0) {
$f = fopen(".htpasswd", "w+");
while ($num>$t) {
unset($seed);
# generate random seed
$all = explode( " ",
"a b c d e f g h i j k l m n o p q r s t u v w x y z "
. "A B C D E F G H I J K L M N O P Q R S T U V W X Y Z "
. "0 1 2 3 4 5 6 7 8 9");
for($i=0;$i<9;$i++) {
srand((double)microtime()*1000000);
$randy = rand(0, 61);
$seed .= $all[$randy];
}
$username = mysql_result($users,$t,"username");
$password = mysql_result($users,$t,"pass");
$crypt = crypt($password, "\$1$$seed");
fputs($f,"$username:$crypt\n");
$t++;
}
}
}
?>

Без всяких вызовов внешних прог. Можете сделать отдельную функцию, без БД.

Магазин керамической плитки и керамогранита (http://www.sbsshop.ru)
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий