youtube.com/watch?v=xxxxx...
Первое что приходит в голову, это если мы используем файло-хостинг, то чтобы кто угодно не мог пройтись циклом по всем загруженным файлам от 1 до 10000000 и зная наших нерадивых пользователей, не скачать их секретные документы, которые они по наивности своей доверили нашему хостингу.
Второе, - сорт сокращения URL, можно заменить каждое 10-ое число буквой a, каждое 28 буквой z, ну и так далее, вплоть до спец символов. Вместо длинющего 10000000 получить грубо говоря AAAZ==.
Но не смотря на все эти ухищрения, не все сайты делают правильно, они делают ID из набора букв, но... заменив букву «a» на следующую по алфавиту «b» мы получаем по сути тот-же инкремент +1, и по можно зайти по любому адресу, запросив любой ID объекта. Вот например Reddit: https://www.reddit.com/comments/3xp8s2
. От ID тут одно название. Можно делать инкремент букв руками.
Немножко погуглив нашёл такую функцию, alphaID: http://kvz.io/blog/2009/06/10/create-short-ids-with-php-like-youtube-or-tinyurl/
alphaID() генерирует из числа — слово, и наоборот, превращает слово — в число. Для сокращения нормально, но проблему безопасности, защиты от брутфорса оно не решает. Буквы просто заменяются на следующие по таблице ASCII и таким образом инкрементом перебираются все объекты.
Каким же образом генерировать псевдо-случайные ID? И надо ли это делать?
Не хочу использовать рандом, потому что рано или поздно такой рандом упрётся в бесконечный цикл, когда все возможные варианты N-значных ID уже сгенерированы и записаны в БД, а для новых осталось совсем немного свободных вариантов. В общем, плохо.
Нужно, если генерировать, то реально псевдо-рандом как на YouTube, а не просто инкрементальные a -> b делать.
Кто-нибудь может поделиться рецептом?