Почему веб-сайты генерируют случайные буквенно-цифровые строки для URL-адресов вместо использования идентификаторов строк?

Почему многие сайты (например, youtube) генерируют строку случайных чисел и букв вместо использования, например, идентификатора строки?

обычно ему что-то нравится

bla?v=wli4l73Chc0

а не как

bla?id=83934

Разве это просто, если у вас много строк? Или есть другие хорошие вещи об этом? Потому что я могу себе представить: bla? Id = 23934234234 не выглядите так красиво

Спасибо и приветствуем

Ответы

Ответ 1

На самом деле это не случайные строки. Обычно они являются номерами (обычно строковыми идентификаторами), которые кодируются в кодировке Base-36 (очевидно, это не всегда так, но их много).

Почему они используют его? Потому что закодированная строка Base-36 короче оригинала.

Например: 1234567890 в базе-36 kf12oi, что на 50% короче.

Смотрите статью Википедии . Проверьте раздел "Использование на практике", чтобы узнать, кто его использует.

Ответ 2

в распределенной среде проще генерировать случайные числа для идентификаторов, чем порядковые номера.

Ответ 3

Я честно не знаю, почему они не будут использовать уникальный идентификатор (или ObjectID или что-то другое в зависимости от какой базы данных), поэтому вы когда-нибудь задумывались, а не представляли ли ID в базе-10, они представляли его в более высокой базе (например, 64 или что-то, что возможно в URL-адресах), чтобы идентификатор был более компактным в строке запроса? (чтение: wli4l73Chc0 - некоторое число в не-base-10)

Ответ 4

Я поддержал ответ Роба, но я также немного поразмышляю об одном из рисков.

Если вы публикуете ссылку типа Почему веб-сайты генерируют случайные буквенно-цифровые строки для URL-адресов вместо использования идентификаторов строк?, где 258510 является идентификатором базы данных, кто-то пытается взломать ваш сайт попытается подключиться к https://stackoverflow.com/questions/2581511.

С помощью stackoverflow это может быть не идентификатор базы данных, и вопросы о stackoverflow не должны быть закрытыми, поэтому это не имеет большого значения, даже если это так.

Но если это был сайт, где важно ограничивать доступ к данным владельцам данных, это потенциально может позволить людям увидеть данные, которых они не должны.

Есть, конечно, вещи, которые вы можете и должны сделать, чтобы они отказались отображать данные, если они не владеют им, но все же лучше сделать URL не идентифицировать идентификатор базы данных. Лучше, как заметил Роб, иметь хэш в какой-то гораздо больший домен или индексом на основе сеанса в набор данных, уже идентифицированных как подходящий, чтобы показать пользователя и доступен только в сеансе входа в систему.

Ответ 5

Я бы предположил, что он обфускает информацию и добавляет/увеличивает количество информации, которая может быть передана через этот параметр.

Ответ 6

Наличие исходных идентификаторов строк или других немодифицированных параметров базы данных в URL-адресах - это плохая практика безопасности. Гораздо лучше иметь хеши в какой-то большой области.

Ответ 7

Некоторые среды также используют это для установки переменных состояния для сеанса. Например, если у вас есть приложение ASP.Net, которое использует cookieless-сеансы, вы найдете аналогичный код в URL-адресе.