Эта тема на forum.dklab.ru


Дмитрий Эсс: Ограниченное время существования ссылки.
Вот возникла проблема, хочу сделать так, чтобы ссылки были действительны только в течение 24 часов после их генерации скрипром.
Придумал такое решение: передать время создания ссыкли в адресной строке через метод get. Но возникают проблемы. Надо ведь тогда время зашифровать, например с помощью md5, а ещё лучше это сделать объединив время с какой-нибудь строкой (любой, не имеет значенияб например md5(oblom.time())). Тогда передать своё время, тем самым обойдя защиту будет невозможно.
Но как тогда сравнивать текущее время со временем создания ссылки, если второе зашифровано? ;)
У меня есть мысли, например округлять значение time() где-то до тысяч и сравнивать 2 округлённых значения в md5, но тогда не получится, чтобы ссылка действовала ровно 24 часа (а получится минут 16 вроде), плюс будут сложности, если ссылка была сгенерирована, когда была одно значение тысяч, а проверка происходит во время другого значения тысяч. Из-за этого придётся увеличить время существования ссылки в 2 раза и сравнивать текущее время с временем генерации ссылки и им же но увеличенным на 1 тысячу.
Короче, вроде что-то получается, но не то, что хотелось и ужасно криво.
У кого какие идеи как осуществить эту затею?
WingedFox:
Простейшая идея:
(Текущее время + 24часа) XOR ключ.
WingedFox:
Еще одна идея - таблица:
первичный ключ CRC32(текущее время+24 часа) и поле с (текущее время+24 часа) для явной проверки.
CRC32 дает хорошую уникальность и является значительно более коротким, чем MD5, что благотворно скажется на производительности.
Дмитрий Эсс:
Первое предложение понял и мне понравилось, я даже об этом и не думал. Ключ можно время от времени менять и всё будет путём. Это же не защитная система пентагона всё-таки.

Насчёт второго предложения, честно говоря, не понял. Ты предлагаешь для этой цели создать таблицу в БД?
WingedFox:
Именно. Для точной валидации по времени доступа.

На машине пользователя сохраняется кука с ключем, что еще дает защиту от сайтокачалок и раздачи прямых ссылок друзьям и знакомым.

PS: простые решения приходят только с опытом 8*)
Дмитрий Эсс:
Да нет мне первое решение боььше нравится. Если к этой шифровке ещё добавить смещение кода всех символов в строке на определённое значение, то будет вообще отменно.
WingedFox:
А зачем? =)
XOR при неизвестном ключе все равно неломаем.
Дмитрий Эсс:
Ломаем простым перебором. :) На всякий пожарный.
WingedFox:
Посчитай, сколько времени будет ломаться 4-байтовый ключ, если ограничить частоту обращения к серверу 3-5 в секунду.
И это при условии, что знаешь, что ключ именно 4-байтовый.
Дмитрий Эсс:
На всякий пожарный.
Я то всё это понимаю, не волнуйся. Жалко что ли потратить на это какие-то доли секунды?
WingedFox:
Смотря сколько посетителей.

А вообще, значительно правильнее организовать взаимодействие с ftp и отдавать файлы с нормальной поддержкой докачки, ведением логов и т.п.
Дмитрий Эсс:
Вся фишка в том, что у меня имеются только ссылки, а не сами файлы. Редирект делает скрипт (типа go.php?id=11111). Поэтому я так и борюсь за временное существование сгенерированных ссылок.
WingedFox:
То же самое делается с помощью FTP но при этом в разы уменьшается нагрузка на сервер и требования к памяти.
Снова арифметика - сколько памяти займет процесс скачивания mp3 размером 5Mb при использовании PHP? FTP?
Сколько раз будет клиент перекачивать файл с начала при обрывах связи с использованием PHP сервера? FTP?
Какой вариант даст выигрыш при скачивании - однопоточный через PHP или многопоточный через FTP?

и т.д.
Дмитрий Эсс:
Объясняю же файлы не у меня на сервере, а на других. У меня только БД со ссылками, уткуда я их и выкавыриваю.
WingedFox:
гм... а какой в этом смысл?
Юрий Насретдинов:
WingedFox:
Пример - webscript.ru . То есть коллекция ссылок на бесплатные скрипты, для экономии траффика.
Дмитрий Эсс:
У меня сайт с музыкой. Не буду же я хранить несколько терабайт музыки у себя на сервере. Я сдираю ссылки на другие сайты. Ещё один плюс - не будет проблем с законом, у меня нет на сервере музыки, я только помогаю пользователям её найти ;).
Дмитрий Эсс:
Я через пару дней, как только руки дойдут, выложу сюда функцию шифрования через xor + смещение кода всех символов в строке на определённое значение. Тогда у темы появится хоть какой-то смысл.
DmitriyPopov:
Оффтоп почищен.
Дмитрий Эсс:
Код получился довольно объёмный, так что скинул его в склад готовых решений. Вот ссылка http://forum.dklab.ru/php/advises/FunktsiyaShifrovaniya.html .

Эта тема на forum.dklab.ru