Master-X
Форум | Новости | Статьи
Главная » Форум » Программинг, Скрипты, Софт, Сервисы » 
Тема: -
цитата
16/05/14 в 21:17
 Ailk
-

Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
цитата
16/05/14 в 21:46
 condom007
1. Генерится токен, в который зашифровано время; этот токен присутствует в урле. Без валидного токена видео не показывается. Расшифровать этот токен умеет только твой софт, который знает секретный ключ (например веб-сервер, который отдаёт статику или скрипт через который эта статика отдаётся). Если после расшифровки токена он НЕ считается валидным (время больше определенного), то заворачиваем просмотр в жопу. Если валидный, то всё ок и отдаём контент.

2. Генерим какой-нибудь мини-токен и записываем его в какое-нибудь быстрое key => value хранилище, которое умеет экспайрить ключи (например мемкэш). При заходе по урлу веб-сервер (например nginx) идет в мемкэш и ищет такой токен. Если токен найден, то всё ок. А если токен проэкспайрился и исчез, то извиняйте - 404.

Оба варианта хороши.
цитата
16/05/14 в 22:24
 Ailk
-

Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
цитата
17/05/14 в 01:29
 Yacc
Схематично.

database_1.tokens2
Код:
CREATE TABLE IF NOT EXISTS `tokens2` (
  `file` varchar(256) NOT NULL,
  `token` varchar(32) NOT NULL,
  `expire` int(11) NOT NULL
) ENGINE=MyISAM

token.php
Код:
<?php
function url ($file, $expire) {
    $token = md5(uniqid(rand(), true));
    $expire = time() + $expire;
    $mysqli = new mysqli('localhost', 'root', '', 'database_1');
    $s = $mysqli->prepare("INSERT INTO tokens2 VALUES (?, ?, ?)");
    $s->bind_param('ssi', $file, $token, $expire);
    $s->execute();
    $s->close();
    return 'test.php?' . http_build_query(array(
        'file' => $file,
        'token' => $token
    ));
}
function validate ($file, $token) {
    $expire = null;
    $mysqli = new mysqli('localhost', 'root', '', 'database_1');
    $s = $mysqli->prepare("SELECT expire FROM tokens2 WHERE file=? AND token =?");
    $s->bind_param('ss', $file, $token);
    $s->execute();
    $s->bind_result($expire);
    $s->fetch();
    $s->close();
    if (null !== $expire) {
        $expired = time() > $expire;
        if ($expired) {
            $s = $mysqli->prepare("DELETE FROM tokens2 WHERE file=?");
            $s->bind_param('s', $file);
            $s->execute();
            $s->close();
        }
        return ! $expired;
    }
    else {
        die ('Invalid file or token');
    }
}
function handle ($file, $token) {
    if (true === validate($file, $token)) {
        header('Location: /files/' . $file);
    }
    else {
        die ('Link expired');
    }
}

test.php
Код:
<?php
require 'token.php';
if (isset($_GET['file']) and isset($_GET['token'])) {
    handle($_GET['file'], $_GET['token']);
}
else {
    ?><a href="<?php echo url('1.jpg', 60); ?>" target="_blank">1.jpg (Expire after 60 sec.)</a><?php
}

Кладем в папку /files/ файл 1.jpg и открываем test.php

icon_smile.gif
цитата
17/05/14 в 05:48
 Ailk
-

Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
цитата
17/05/14 в 10:14
 condom007
Ailk писал:
варианты проверок токенов с пхп не рассматриваю в силу того, что на данный момент на любом сервере(нгинкс, апач) существует решение в виде различных модулей секьюр линк. Оно получается гораздо легче для сервера и не требует базы. К сожалению все эти модули задействуют мд5 (чего крайне не хотелось бы).


А почему тебя так смущают какие-то доп. параметры в урле к статике? Вполне себе явление. Можешь рерайтами сделать этот md5 частью url'а:

Вместо video.ext?token=0123456789abcdef0123456789abcdef
/0123456789abcdef0123456789abcdef/video.ext
/0123456789abcdef/0123456789abcdef/video.ext

Как угодно... Можно не весь токен использовать, а только его часть, например.
цитата
17/05/14 в 10:17
 ibiz
а nginx умеет шифровать урлы для статики, без бд?
цитата
17/05/14 в 11:40
 Ailk
-

Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
цитата
17/05/14 в 12:15
 ibiz
Ailk писал:

Шифровать незнаю, а во расшифровывать - да. Хотя нет, немного не так. Сверять зашифрованное по алгоритму умеет.


то есть может отдать файл 1.avi по линку 0123456789abcdef0123456789abcdef.avi и при это напрямую скачать файл 1.avi не получится?
есть пруфы почитать, как это делается?
цитата
17/05/14 в 16:40
 Ailk
-

Последний раз редактировалось: Ailk (18/09/16 в 00:11), всего редактировалось 2 раз(а)
цитата
17/05/14 в 16:52
 Securom
А если купить движок для тьюба,тот же KVS отлично генерит временные ссылки для видосов.
цитата
27/05/14 в 09:04
 oldaser
достаточно разместить видео на сдн с функцией авторизации по токену и никаких скриптов придумывать не нужно. Тот же квс + какой-нить сдн нормальный (в личке могу сказать какой у меня если нужно) сразу же дает это решение - ссылка на видео работает заданное время (у меня 2 часа например)
цитата
08/07/14 в 05:08
 EasyMoney
Всем привет. Надо именно то, что описано в этой теме. Кто может сделать – пишите в личку (желательно с номером icq).
Имеется старый кошель Вебмани с большим БЛ, а также морда на серче.
За пример берите тюб dojki.com.
цитата
08/07/14 в 09:51
 Дартаньян
trollface.png расшифровывать урлы... лоооол.


Эта страница в полной версии