💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 16/05/14 в 21:17 |
-
Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
|
|
|
|
С нами с 30.04.04
Сообщения: 602
Рейтинг: 293
|
Добавлено: 16/05/14 в 21:46 |
1. Генерится токен, в который зашифровано время; этот токен присутствует в урле. Без валидного токена видео не показывается. Расшифровать этот токен умеет только твой софт, который знает секретный ключ (например веб-сервер, который отдаёт статику или скрипт через который эта статика отдаётся). Если после расшифровки токена он НЕ считается валидным (время больше определенного), то заворачиваем просмотр в жопу. Если валидный, то всё ок и отдаём контент.
2. Генерим какой-нибудь мини-токен и записываем его в какое-нибудь быстрое key => value хранилище, которое умеет экспайрить ключи (например мемкэш). При заходе по урлу веб-сервер (например nginx) идет в мемкэш и ищет такой токен. Если токен найден, то всё ок. А если токен проэкспайрился и исчез, то извиняйте - 404.
Оба варианта хороши.
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 16/05/14 в 22:24 |
-
Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
|
|
|
|
С нами с 09.03.09
Сообщения: 6053
Рейтинг: 3538
|
Добавлено: 17/05/14 в 01:29 |
Схематично.
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
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 17/05/14 в 05:48 |
-
Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
|
|
|
|
С нами с 30.04.04
Сообщения: 602
Рейтинг: 293
|
Добавлено: 17/05/14 в 10:14 |
Ailk писал: | варианты проверок токенов с пхп не рассматриваю в силу того, что на данный момент на любом сервере(нгинкс, апач) существует решение в виде различных модулей секьюр линк. Оно получается гораздо легче для сервера и не требует базы. К сожалению все эти модули задействуют мд5 (чего крайне не хотелось бы). |
А почему тебя так смущают какие-то доп. параметры в урле к статике? Вполне себе явление. Можешь рерайтами сделать этот md5 частью url'а:
Вместо video.ext?token=0123456789abcdef0123456789abcdef
/0123456789abcdef0123456789abcdef/video.ext
/0123456789abcdef/0123456789abcdef/video.ext
Как угодно... Можно не весь токен использовать, а только его часть, например.
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 17/05/14 в 10:17 |
а nginx умеет шифровать урлы для статики, без бд?
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 17/05/14 в 11:40 |
-
Последний раз редактировалось: Ailk (18/09/16 в 00:10), всего редактировалось 1 раз
|
|
|
|
С нами с 24.10.04
Сообщения: 18881
Рейтинг: 9010
|
Добавлено: 17/05/14 в 12:15 |
Ailk писал: |
Шифровать незнаю, а во расшифровывать - да. Хотя нет, немного не так. Сверять зашифрованное по алгоритму умеет. |
то есть может отдать файл 1.avi по линку 0123456789abcdef0123456789abcdef.avi и при это напрямую скачать файл 1.avi не получится?
есть пруфы почитать, как это делается?
|
|
|
|
💀💀💀
С нами с 31.05.10
Сообщения: 4689
Рейтинг: 728
|
Добавлено: 17/05/14 в 16:40 |
-
Последний раз редактировалось: Ailk (18/09/16 в 00:11), всего редактировалось 2 раз(а)
|
|
|
|
С нами с 30.10.12
Сообщения: 3123
Рейтинг: 2541
|
Добавлено: 17/05/14 в 16:52 |
А если купить движок для тьюба,тот же KVS отлично генерит временные ссылки для видосов.
|
|
|
|
С нами с 20.11.08
Сообщения: 74
Рейтинг: 16
|
Добавлено: 27/05/14 в 09:04 |
достаточно разместить видео на сдн с функцией авторизации по токену и никаких скриптов придумывать не нужно. Тот же квс + какой-нить сдн нормальный (в личке могу сказать какой у меня если нужно) сразу же дает это решение - ссылка на видео работает заданное время (у меня 2 часа например)
|
|
|
|
С нами с 06.07.14
Сообщения: 8
|
Добавлено: 08/07/14 в 05:08 |
Всем привет. Надо именно то, что описано в этой теме. Кто может сделать – пишите в личку (желательно с номером icq).
Имеется старый кошель Вебмани с большим БЛ, а также морда на серче.
За пример берите тюб dojki.com.
|
|
|
|
+ +
WP-Master
С нами с 17.01.13
Сообщения: 1922
Рейтинг: 1123
|
Добавлено: 08/07/14 в 09:51 |
расшифровывать урлы... лоооол.
|
|
|
|