Примітка:
Багато людей, схоже, плутають "приватну" URL-адресу з автентифікацією. Також, мабуть, існує певна плутанина, що надсилання посилання через довірену сутність - це спроба двофакторної автентифікації. Щоб було зрозуміло, ми говоримо про загальнодоступний ресурс, хоч і про той, який досить важко здогадатися.
Використовуючи приватну 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-адресу, щоб поділитися ним з ними. Однак, якщо ресурс вдасться використати для крадіжки особистості чи компрометації їхніх облікових записів з іншими постачальниками послуг, ви, швидше за все, будете турбуватися про обмеження доступу до цього ресурсу.