Системный администратор в Черногории и по всему миру

Администрирование серверов, разработка плагинов к хостинг-панелям

Архив за: Февраль 2015

Защищаем от хотлинкига

Один из клиентов попросил защитить от хотлинкинга скачивание файлов сервера. Наиболее простой и надежный механизм, не требующий внедрение сложных схем, добавления авторизации и прочего, это выдача уникальной ссылки для конкретного пользователя. Для этого понадобится nginx (а точнее его модуль secure_link_module)и в нашем случае, сайт на php.

Конфиг nginx в общем случае будет выглядеть так:
location ^~ /downloads/ {
secure_link $arg_hash,$arg_expires;
secure_link_md5 "$secure_link_expires$uri$remote_addr salt";
if ($secure_link = "") {
return 403;
}
if ($secure_link = "0") {
return 410;
}
alias /var/www/sites/data/www/test/files/;
}

где $arg_hash - $_GET['hash'] переменная hash кодирующая ссылку, а $arg_expires - $_GET['expires'] содержащее время "протухания" ссылки, а salt - "соль" которой добавляем уникальность (как вариант, можно добавлять в secure_link_md5 user_agent или любые другие переменные). Я использую alias, так как физически имя папки в url отличается от фактической в файловой системе.

Генерация ссылки на php происходит следующим образом:

$salt="salt";
$time = time() + 10800;
$file="/downloads/file.rar"
$hash=md5($time."/".$file.$_SERVER['REMOTE_ADDR']." ".$salt,TRUE);
$hash = strtr( base64_encode($hash), array( '+' => '-', '/' => '_', '=' => '' ));
$link="http://test.com".$file."?hash=".$hash."&expires=".$time;

Тэги: , ,