Коротке посилання з паролевим захистом - це коротка URL-адреса, яка запитує пароль перед тим, як відправити когось далі. Ви відкриваєте посилання, потрапляєте на невелику проміжну сторінку замість призначення, вводите пароль - і лише тоді спрацьовує перенаправлення. Введіть неправильний пароль - залишаєтесь на підказці. Призначення ніколи не розкривається, поки перевірка не пройде.
Це весь принцип, і варто бути точним щодо нього, бо назва трохи перебільшує. Паролевий шлагбаум - це перешкода для доступу перед посиланням. Це не шифрування сторінки за посиланням. Це різні гарантії, і плутанина між ними - причина, чому люди дивуються пізніше. Ця стаття розповідає про те, для чого шлагбаум є корисним, які випадки справді підходять, як перевірка працює на перенаправленні, де безпека закінчується та з чим поєднати, щоб все трималося.
Для чого призначене коротке посилання з паролевим захистом#
Корисні випадки мають спільну форму: ви поширюєте посилання через канал, який не повністю контролюєте, і хочете, щоб для входу потрібно було щось, крім URL-адреси.
Конфіденційний документ - очевидний випадок. Ви надсилаєте чернетку контракту, фінансову модель або внутрішню презентацію комусь поза вашою компанією. Листи пересилають. PDF перенадсилають. Коротке посилання, яке може відкрити будь-хто, хто має URL, є лише настільки приватним, наскільки обережна найменш обережна людина, яка коли-небудь його тримала. Поставте пароль - і випадкове пересилання більше не означає автоматичного доступу.
Матеріали для клієнтів - та сама схема з прикріпленим дедлайном. Агентство передає пакет матеріалів, відредаговане відео, звіт кампанії. Клієнт має отримати доступ, вся адресна книга клієнта - ні. Захищена URL-адреса тримає матеріал за спільним секретом, який ви встановлюєте при створенні посилання.
Приватні кампанії та контент із обмеженим доступом доповнюють список. Цільова сторінка перед запуском, яку ви хочете переглянути невеликій групі. Пропозиція раннього доступу для списку очікування. Ресурс лише для учасників, де аудиторія вже має пароль звідкись ще. У кожному випадку посилання мандрує через електронну пошту або чат, і пароль є тим, що відокремлює «мені це дали» від «я на це натрапив».
Що не підходить: будь-що справді секретне, будь-що регульоване, будь-що, де витік є інцидентом, що підлягає звітності. Для цього спільний пароль посилання є надто тупим інструментом. Вам потрібна автентифікація для кожної особи на самому призначенні - це інший засіб контролю, до якого я повернуся.
Як паролевий шлагбаум працює на перенаправленні#
Ось механічна частина, тому що порядок операцій і є тим, що робить шлагбаум значущим.
Звичайне коротке посилання - це перенаправлення. Гранична мережа шукає слаг, знаходить призначення та записує 302 браузеру відвідувача. Швидко, без стану, без питань. Коротке посилання з паролевим захистом вставляє один крок перед перенаправленням: гранична мережа бачить, що посилання має встановлений пароль, тому замість пересилання повертає виклик. Відвідувач отримує проміжну сторінку із запитом пароля. Він вводить його. Надіслане значення перевіряється відносно збереженого хешу. Якщо збігається - перенаправлення відбувається. Якщо ні - залишається на підказці, і URL призначення ніколи не надсилається браузеру.
Два деталі мають значення для того, чи є це щось варте.
По-перше, пароль хешується, ніколи не зберігається у відкритому вигляді. Збережений секрет посилання повинен бути одностороннім хешем, щоб читання бази даних не передавало зловмиснику кожен пароль посилань у системі. Argon2id є поточною рекомендацією для хешування паролів, і це те, що Elido використовує для паролів посилань, з перевіркою, що виконується в процесі з використанням порівняння за фіксованим часом, щоб сама перевірка не витікала інформацію через тайминг. API для посилання ніколи не повертає хеш; він повертає логічне значення, яке вказує, чи встановлений пароль. Одержувач, що потрапляє на захищене посилання, отримує 401 з прапорцем password_required та токеном виклику і повинен надіслати правильний пароль у подальшому запиті до того, як відбудеться перенаправлення. Механіка зберігання описана у контрольному списку безпеки скорочувача URL, розділ про захист паролем для кожного посилання.
По-друге, перевірка відбувається до того, як призначення розкривається. Це звучить очевидно, але дивовижна кількість «приватних» схем посилань витікає призначення в клієнтському коді або в ланцюжку перенаправлень, який рішучий відвідувач може зчитати з мережі. Сенс виконання перевірки на перенаправленні, на стороні сервера, полягає в тому, що URL-адреса призначення залишається на сервері до тих пір, поки пароль не правильний. Якщо ви колись бачили шлагбаум, реалізований як JavaScript, що отримує реальну URL-адресу та потім перенаправляє, ви бачили шлагбаум, через який будь-хто з інструментами розробника браузера може пройти прямо. Серверна оцінка - це різниця, та сама логіка, що змушує розумні посилання маршрутизуватися на граничному рівні, а не в JS-обгортці на цільовій сторінці.
Обмеження безпеки, сказані прямо#
Це розділ, який люди пропускають і потім шкодують, тому він стоїть посередині, де його важко пропустити.
Паролевий шлагбаум захищає коротке посилання. Він не захищає призначення. Якщо призначення - це публічна URL-адреса, до якої будь-хто може дістатися, ввівши її безпосередньо, тоді пароль зупиняє лише людей, які мають коротке посилання, а не тих, хто може вгадати або натрапити на базову сторінку. Шлагбаум підвищує планку для типового випадку поширення, де у людей є лише коротка URL-адреса. Він нічого не робить для призначення, яке вже відкрите.
Тому правило просте: призначення також має бути захищене контролем доступу. Документ за коротким посиланням із паролевим захистом також має знаходитися в місці, яке перевіряє, хто ви є, а не просто там, де випадково є довгий невгадуваний шлях. OWASP Authentication Cheat Sheet та супутній посібник Access Control є довідником тут: автентифікація доводить, хто хтось є, контроль доступу вирішує, що він може досягти, а спільний пароль посилання є слабкою формою першого, яка нічого не говорить про другий. Використовуйте його як зручний шар, а не як те, що стоїть між зловмисником і регульованими даними.
Ще кілька чесних обмежень.
Спільний пароль - спільний для всіх. Кожен, хто його має, є одним і тим самим суб'єктом для шлагбауму. Немає індивідуального сліду того, хто відкрив посилання, немає способу відкликати доступ однієї людини без ротації пароля для всіх. Якщо вам потрібно знати, що Даша конкретно відкрила матеріал, спільний пароль посилання цього не скаже.
Посилання повинно обслуговуватися через HTTPS, завжди. Пароль, надісланий через відкритий HTTP, надсилається у відкритому вигляді будь-кому на мережевому шляху. Шифрування транспорту - це підлога, а не особливість; огляд HTTPS від MDN пояснює, чому. Elido обслуговує перенаправлення через HTTPS за замовчуванням, включно з кастомними доменами, але цей принцип діє де б ви не розміщували шлагбаум.
І пароль не є заміною закінченню терміну. Посилання, яке залишається активним вічно - це відповідальність незалежно від того, чи є на ньому пароль, бо секрет повільно витікає з часом, коли його вставляють у дедалі більше місць. Поєднайте шлагбаум із терміном дії.
З чим поєднувати паролевий захист#
Паролевий шлагбаум - це один засіб контролю. Він найкраще працює у поєднанні з іншими, що покривають те, що він не може.
Закінчення терміну та обмеження максимальної кількості кліків обмежують посилання в часі та використанні. Встановіть expires_at, щоб матеріал клієнта зник після завершення взаємодії, та обмеження максимальних кліків, щоб посилання для одноразового завантаження деактивувалося після однієї відкриття. Обидва застосовуються при перенаправленні до того, як записується будь-яка подія кліку, що означає: спроба ввести невірний пароль для вже простроченого посилання навіть не досягає шлагбауму. Компроміси навколо терміну дії розглядаються у статті закінчення терміну посилань та самознищувальні посилання.
Обмеження по IP або геолокації звужують тих, хто взагалі може спробувати потрапити через шлагбаум. Якщо матеріал клієнта завжди відкривають з одного офісу, обмеження посилання цим діапазоном означає, що витік пароля плюс витік посилання все одно не спрацює звідкись іншого. Засоби регіонального контролю описані у статті географічне таргетування коротких посилань, і вони поєднуються з паролем, а не замінюють його.
Для команд правильна відповідь зазвичай взагалі не є спільним паролем. Це SSO. Якщо люди, які мають доступ до посилання, є співробітниками у вашому провайдері ідентичностей, закрийте призначення за SCIM та SSO, щоб доступ слідував за директорією: хтось залишає компанію - їх доступ зникає, ротація пароля не потрібна. Спільний пароль посилання призначений для одноразового зовнішнього поширення; керований директорією доступ - для всього, де потрібне індивідуальне відкликання. Посібник з налаштування SCIM та SSO проводить через підключення, а сторінка корпоративних рішень пояснює, де він застосовується.
Загальний принцип - захист шарами. Жоден окремий засіб контролю тут не є достатнім сам по собі. Пароль зупиняє випадковий доступ, закінчення терміну обмежує вікно, HTTPS захищає передачу, контроль доступу до призначення захищає вміст, а SSO вирішує командний випадок. Застосовуйте ті, що потрібні для вашої ситуації.
Практичний порядок дій#
Якщо ви хочете захистити посилання, форма роботи однакова незалежно від інструменту.
Встановіть пароль при створенні або редагуванні посилання. Налаштування посилання мають дозволяти прикріпити пароль; після встановлення посилання перестає бути простим перенаправленням та починає повертати виклик. Оберіть пароль, який не є тривіально вгадуваним та не використовується десь ще, бо спільний секрет, який також відкриває вашу пошту, є поганим спільним секретом.
Надсилайте посилання та пароль різними каналами. Це єдина найважливіша звичка. Надсилайте коротке посилання в листі або документі, а пароль - через повідомлення в чаті, окремий лист або швидкий дзвінок. Якщо обидва мандрують в одному повідомленні, одне перехоплене повідомлення передає все, і шлагбаум нічого вам не дав. Розділення означає, що зловмиснику потрібно два канали, а не один.
Встановіть закінчення терміну одночасно. Вирішіть заздалегідь, як довго має жити посилання та чи має воно закінчуватися після відомої кількості відкриттів, і встановіть це при створенні, а не обіцяйте собі прибрати пізніше. Ви не прибратимете.
Переконайтеся, що призначення має власний контроль доступу, якщо вміст є конфіденційним. Шлагбаум виконує свою роботу для випадку поширення. Якщо базовий документ також має протистояти тому, хто вгадає URL, цей захист має знаходитися на призначенні, а не на короткому посиланні. Для повнішого розгляду того, як ці частини вписуються в модель загроз, стаття чи безпечні скорочувачі URL проходить через ширшу картину, а сторінка довіри описує позицію Elido.
Це чесна версія коротких посилань із паролевим захистом. Вони є корисним, зручним способом запобігти тому, щоб спільна URL-адреса була відкрита для будь-кого, хто її отримує. Вони не є сейфом. Використовувані як один шар у стеці, із закінченням терміну та належно захищеним призначенням, вони виконують саме ту роботу, яку мають виконувати. Використовувані як єдине, що стоїть між зловмисником та важливими даними, вони підведуть. Встановіть шлагбаум, розділіть канали, обмежте термін дії та заблокуйте призначення - і у вас буде процес поширення, який триматиме.
Якщо ви хочете побачити, які засоби контролю є на якому плані, сторінка ціноутворення їх перелічує, а функція кастомних доменів охоплює обслуговування захищених посилань на вашому власному брендованому домені через HTTPS. Налаштування описане у статті як налаштувати брендовані короткі посилання.