LSDEEX

July 12, 2010

создание пароля для htpasswd средствами php (алгоритм MD5 APR)

Filed under: other, php, хостинги — admin @ 1:04 am

Немало времени потратил на то, чтобы научиться создавать htpasswd средствами php без утилиты апача htpasswd.exe

В итоге пришёл к одному выводу:

- для винды подходит либо незакодированный пароль (plain-text), либо закодированный алгоритмом MD5 APR
- для юникс-систем только закодированный алгоритмом MD5 APR

Вкратце, что такое алгоритм MD5 APR: существует версия MD5 для юникс-систем, основное отличие которой в том, что текст кодируется в обычный md5 тысячу раз. MD5 APR, в свою очередь, основан на юникс-версии, но с добавлением соли (salt).

Функция для генерации MD5 APR хеша в php:

[-]
View Code PHP
function md5_apr($password)
{
    $salt = substr(str_shuffle("abcdefghijklmnopqrstuvwxyz0123456789"), 0, 8);

    $len = strlen($password);

    $text = $password .'$apr1$'. $salt;

    $bin = pack("H32", md5($password.$salt.$password));

    for($i = $len; $i > 0; $i -= 16)
        $text .= substr($bin, 0, min(16, $i));

    for($i = $len; $i > 0; $i >>= 1)
        $text .= ($i & 1)? chr(0): $password{0};

    $bin = pack("H32", md5($text));

    for($i = 0; $i < 1000; $i++)
    {
        $new = ($i & 1)? $password : $bin;

        if ($i % 3)
            $new .= $salt;

        if ($i % 7)
            $new .= $password;

        $new .= ($i & 1)? $bin : $password;
        $bin = pack("H32", md5($new));
    }

    $tmp = '';

    for ($i = 0; $i < 5; $i++)
    {
        $k = $i + 6;
        $j = $i + 12;

        if ($j == 16)
            $j = 5;

        $tmp = $bin[$i].$bin[$k].$bin[$j].$tmp;
    }

    $tmp = chr(0).chr(0).$bin[11].$tmp;
        $tmp = strtr(strrev(substr(base64_encode($tmp), 2)),
            "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwx  yz0123456789+/",
            "./0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmn  opqrstuvwxyz");

    return "$"."apr1"."$".$salt."$".$tmp;
}

January 4, 2010

Basic-авторизация Apache

Filed under: linux, хостинги — admin @ 3:27 pm

Во всех скриптах с 12.07.2010 есть утилита для создания авторизации – /engine/adp.php
(дополнительно: создание пароля для htpasswd средствами php (MD5 APR))

Для того чтобы запаролить любую директорию на сервере, нам понадобятся всего 2 файла:

.htaccess – он укажет апачу что данная директория должна использовать basic-авторизацию
.htpasswd – он содержит в себе данные в формате логин:пароль

1 .HTACCESS

Вот пример содержимого этого файла:

[-]
View Code PHP
<Files .htpasswd>
   deny from all
</Files>

AuthType Basic
AuthName "Restricted Area"
AuthUserFile /home/kiper/data/www/your-site/.htpasswd
Require valid-user

Здесь текст “Restricted Area” вы можете заменить на любой другой – он появится в окне, запрашивающем логин и пароль как пояснение к необходимости авторизации.

Значение AuthUserFile должно содержать полный путь до файла .htpasswd
Выяснить прямой путь до директории с вашим сайтом вы можете создав там простой path.php с текстом

[-]
View Code PHP
<?php echo getcwd(); ?>

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

2 .HTPASSWD

Этот файл содержит в себе пару логин:пароль, но пароль находится в зашифрованном виде.
Чтобы получить такую пару из простого текста, рекомендую онлайн-инструмент

http://www.htaccesstools.com/htpasswd-generator/

Вводите логин, пароль – получаете содержимое для .htpasswd
К примеру, test:test кодируется в test:$apr1$Y52u0/..$Hz3CXNuKUCBCJMaW8lx1p.

Теперь все что вам осталось – залить оба файла на сервер.
При первой попытки открытия сайта, он запросит у вас basic-авторизацию. Введите свои логин и пароль один раз и они будут сохранены.

December 11, 2009

FirstVds.Ru – быстрый старт

Filed under: хостинги — admin @ 1:31 am

Один хороший хостинг, на 100% процентов подходящий для использования моих скриптов – www.firstvds.ru

(more…)

August 21, 2009

open_basedir и cURL в php 5

Filed under: linux, php, хостинги — admin @ 5:44 pm

CURLOPT_FOLLOWLOCATION в curl порой не работает из-за того что директива open_basedir в php.ini (и в httpd.conf на firstvds.ru) имеет значение, указывающее на директорию.
чтобы заставить curl работать, надо сделать так, чтобы значение директивы равнялось none.

(more…)

Powered by WordPress