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
цитата
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
Дартаньян
расшифровывать урлы... лоооол.
Новая тема
Ответить
Эта страница в полной версии