Примечание:
Многие люди путают «частный» URL с аутентификацией. Кроме того, кажется, что существует некоторая путаница, что отправка ссылки через доверенный объект является попыткой двухфакторной аутентификации. Чтобы было ясно, мы говорим об общедоступном ресурсе, хотя о нем достаточно сложно догадаться.
При использовании частного URL-адреса всегда следует предполагать, что он может быть скомпрометирован - вам следует создать такой URL-адрес, чтобы, даже если он был скомпрометирован, ресурс не передавал злоумышленнику информацию.
Частные / трудно угадываемые URL-адреса не эквивалентны аутентификации на основе пароля. По своей природе частные URL вообще не являются частными - они являются общедоступными ресурсами. Я думаю, что термин «частный» URL является неправильным, скорее это «неясные» URL.
В некоторых случаях допустимо использование «частного» URL, но они по своей природе менее безопасны, чем традиционные методы аутентификации, такие как аутентификация по паролю или аутентификация на основе ключей.
Некоторые из мест, которые я обычно видел, использовали "частные" URL:
- Пароль Сброс электронной почты
- Письма генерации сертификатов
- Письма с подтверждением аккаунта / электронной почты
- Доставка купленного контента (электронные книги и т. Д.)
- Другие разные вещи, такие как регистрация на рейс, распечатка посадочного талона, использование личных URL в дополнение к традиционной аутентификации
Общность здесь заключается в том, что случайные URL-адреса обычно хороши только для одноразовых операций. Кроме того , традиционная аутентификация и случайные адреса не являются взаимоисключающими - на самом деле, они могут быть использованы в сочетании друг с другом , чтобы обеспечить дополнительную безопасность при доставке ресурса.
Как указал Роберт Харви, единственный способ безопасного использования случайного / частного URL-адреса - это динамическая генерация страницы и передача URL-адреса пользователю таким образом, чтобы его можно было считать полуавторизованным. Это может быть электронная почта, SMS и т. Д.
Случайно сгенерированный / частный URL обычно имеет несколько свойств:
- Это должно истечь через разумное количество времени
- Это должен быть одноразовый URL: IE должен истечь после первого обращения к нему.
- Он должен отложить аутентификацию пользователя до некоторой другой сущности, которой он доверяет для безопасной аутентификации пользователя. (Отправив ссылку по электронной почте или SMS и т. Д.)
- Для современного компьютера должно быть невозможным грубое форсирование URL-адреса в период времени, предшествующий истечению срока действия, - либо путем ограничения скорости API, предоставляющего ресурс, либо путем создания конечной точки URL с достаточной энтропией, такой, что ее невозможно угадать.
- Не должно быть утечки информации о пользователе. IE: если страница предназначена для сброса пароля: страница не должна отображать информацию учетной записи запрашивающих. Если Алиса запрашивает ссылку для сброса пароля, а Боб каким-то образом угадывает URL, Боб не должен знать, чей пароль он сбрасывает.
- Если это действительно утечка информации о пользователе, она должна использоваться поверх традиционной аутентификации, например, страница может считать пользователя аутентифицированным, если у него есть набор файлов cookie или если их session_id все еще действителен.
Разные ресурсы требуют разных уровней безопасности. Если вы хотите поделиться секретным рецептом с некоторыми друзьями, например, было бы приемлемо использовать случайный / частный URL, чтобы поделиться им с ними. Однако, если ресурс можно использовать для кражи личных данных или скомпрометировать их учетные записи с другими поставщиками услуг, вам, вероятно, будет гораздо важнее ограничить доступ к этому ресурсу.