Как передать длинный URL в текстовых электронных письмах?

У меня есть это электронное письмо для создания учетной записи, которое отправляется всем, кто пытается создать учетную запись, так как мне нужно подтвердить, что они являются теми, кем они себя называют.

Однако моя проблема заключается в том, что URL-адрес, по которому им нужно щелкнуть, когда они получают мое электронное письмо, слишком длинный, и некоторые почтовые клиенты не очень хорошо справляются с этим и иногда обрезают URL-адрес, что делает URL-адрес недействительным при нажатии.

Поскольку URL содержит имя домена, хешированный адрес электронной почты и длинный код активации. Это выглядит примерно так.

http://domain.com/activation?email=75a5867d3df134bededbaf24ff17624d&key=8fecb20817b3847419bb3de39a609afe

Хотя некоторые почтовые клиенты в порядке с этим, но некоторые нет... И я не хочу использовать электронную почту HTML, а придерживаюсь обычной / текстовой электронной почты. Также я слышал ужасные истории с использованием укороченных URL-адресов, поэтому я не уверен, стоит ли их использовать...

Любые идеи в этой области приветствуются!

1 ответ

Решение

Я бы определенно согласился с Джейсоном: сократите ваш URL.

Подумайте, что вам действительно нужно.

  • Скорее всего, адрес электронной почты уже есть в базе данных, так что вы можете обратиться к нему с коротким идентификатором (скажем, максимум 7 цифр). Ваша подпись может быть очень простой substring (base64_url(md5(email+salt)), 0, 5), 5 символов base64 - это 64^5= около 1 миллиарда возможностей. Это, вероятно, достаточно безопасно (и какой будет реальный ущерб, если кто-то зарегистрируется с неправильным адресом электронной почты). Так что ваш URL будет http://domain.com/activation?email=1234&key=aD5Y_, http://domain.com/activation?e=1234&k=aD5Y_ или даже http://domain.com/activation?e=1234aD5Y_, В последнем формате вы знаете, что последние 5 символов являются ключом, поэтому остальное - идентификатор. Обратите внимание, что в примере кода предполагается, что md5 будет возвращаться в 8-битном строковом формате (а не в шестнадцатеричном формате), а base64_url использует безопасный для URL метод base64. Кроме того, некоторая справочная информация о соли.
  • Если ваш адрес электронной почты имеет длинный идентификатор или должен быть также закодирован в URL-адресе, или вышеприведенное еще недостаточно короткое, рассмотрите еще более короткую форму. В основном это приведет к созданию собственного сокращения URL. Непосредственно перед тем, как вставить ссылку в электронное письмо, сгенерируйте случайную строку из 5 символов. Вставьте эту строку в качестве ключа в memcached (или в базу данных), используя в качестве значения исходный URL. Тогда ваш URL может быть http://domain.com/redirect?key=rT-tW, Когда вы увидите это в своем приложении, просто получите исходный URL из базы данных /memcached и перенаправьте туда.

Убедитесь, что ваша система устойчива к следующему:

  • Кто-то вводит адрес электронной почты (свой реальный адрес электронной почты), вы отправляете ссылку
  • Этот человек меняет свой адрес электронной почты на фальшивый на веб-сайте, прежде чем щелкнуть ссылку, вы отправите новое письмо на новый (фальшивый) адрес электронной почты.
  • Теперь они нажимают на ссылку из первого письма, и ваш веб-сайт подтверждает свой адрес электронной почты во второй (поддельной) форме.

Одним из способов сделать это является использование самого адреса электронной почты (а не, например, только идентификатора пользователя) при генерации ключа, как предложено выше.

Другие вопросы по тегам