Неправильный пароль…
снова ввожу свои учетные данные и такое же раздражающее красное поле «Неверный пароль»
Теперь, когда я хороший разработчик с хорошим безопасным паролем, хранящимся в моем «менеджере паролей», я открываю программное обеспечение менеджера паролей, вытаскиваю свой «возможно, забыл» пароль и снова ввожу его…
"Неправильный пароль"
… Что случилось??
Что ж, не буду утомлять вас всеми подробностями, хотя эта история произошла не со мной (к счастью), она наверняка случилась со многими другими. Это может случиться с более «продвинутыми» пользователями, а не только с мамами и папами…
Подумайте об этой ситуации. Вы получаете электронное письмо/ссылку/публикацию чего угодно… Со ссылкой:
SomeRecognizedWebsite.com/forward/?d=hackme.com
Итак, если вы видите крупную фирменную компанию, которую вы уже знаете и которой доверяете, в большинстве случаев вы не будете слишком беспокоиться о переходе по их ссылкам, верно?
Если вы видите ссылку из Google или Facebook, вы, вероятно, просто плывете по течению и, вероятно, доверяете странице, которая загрузится…
Проблема здесь в том, что некоторые «умные» хакеры пользуются услугами переадресации компаний и создают ссылки, которые будут перенаправлять вас на их собственные вредоносные веб-сайты, а затем могут легко вытащить из вас ваши пароли, как в истории выше.
В ссылке вы можете увидеть действительный известный домен «SomeRecognizedWebsite.com» и некоторый текст (большинству людей это не важно). Но эта ссылка может перенаправить вас на «hackme.com» или любой другой домен, который я мог бы туда указать…
Так какого черта я рассказываю вам обо всем вышеперечисленном??
Это всего лишь предисловие к нашему решению вышеупомянутой проблемы, когда мы использовали токены JWT для защиты наших URL-адресов и чтобы хакеры не использовали наш авторитет в своих интересах.
Поэтому вместо этого URL:
SomeRecognizedWebsite.com/forward/?d=hackme.com
Мы используем:
SomeRecognizedWebsite.com/forward/?d=xxxxx.BIG_JWT_TOKEN.zzzzz
этот токен JWT подписан нашей серверной службой и доступен для чтения всем, поэтому мы ничего здесь не скрываем, но когда этот токен JWT будет прочитан нашей серверной службой, он может подтвердить, что им не манипулировали.
Итак, это поток:
- Мы создаем JWT для переадресации на «social-site.com» с ключом-значением =>redirectTo = «otherwebsite.com».
- Допустим, сгенерированный токен — это «jwt_redirect_token».
- Теперь мы можем поделиться нашей службой перенаправления ссылок «oursite.com/forward/jwt_redirect_token».
- Кто-то нажимает на нашу ссылку
- Наша служба принимает токен «jwt_redirect_token» и проверяет, подписан ли он нами.
- Мы анализируем токен и извлекаем значение для «redirectTo».
- Теперь мы просто перенаправляем пользователя на извлеченное значение из «redirectTo».
Теперь вы можете видеть, что наш «переадресатор URL» безопасен, и люди не могут воспользоваться доверием к нашему сайту.
Некоторые примечания, которые могут помочь:
- Вы можете добавить гораздо больше данных, чем просто целевой URL. Вы можете добавить источник, кампанию или любые другие соответствующие данные, которые могут быть полезны для бизнеса.
- С другой стороны… не сходите с ума, так как есть некоторые ограничения на длину URL (я думаю, 1024. Погуглите)
- Если вам нужно, чтобы к этим URL-адресам было подключено много данных, вы всегда можете установить идентификатор в URL-адресе и сохранить все эти данные в хранилище ключ-значение, которое вы можете получить при активации URL-адреса.
Реализация:
Я был бы рад поделиться некоторым кодом, но библиотеки JWT довольно просты в использовании и поддерживаются на ОГРОМНОМ диапазоне языков. Для получения дополнительной информации о JWT и библиотеках перейдите на jwt.io.
Если вы хотите, чтобы я поделился некоторыми примерами, просто прокомментируйте ниже.
Я был бы рад услышать о любых других вариантах использования, которые вы использовали JWT.
Первоначально опубликовано на сайте tzookb.com 6 декабря 2018 г.