Неправильный пароль…

снова ввожу свои учетные данные и такое же раздражающее красное поле «Неверный пароль»

Теперь, когда я хороший разработчик с хорошим безопасным паролем, хранящимся в моем «менеджере паролей», я открываю программное обеспечение менеджера паролей, вытаскиваю свой «возможно, забыл» пароль и снова ввожу его…

"Неправильный пароль"

… Что случилось??

Что ж, не буду утомлять вас всеми подробностями, хотя эта история произошла не со мной (к счастью), она наверняка случилась со многими другими. Это может случиться с более «продвинутыми» пользователями, а не только с мамами и папами…

Подумайте об этой ситуации. Вы получаете электронное письмо/ссылку/публикацию чего угодно… Со ссылкой:

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 г.