Как передать длинный URL в текстовых электронных письмах? - PullRequest
0 голосов
/ 20 февраля 2012

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

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

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

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

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

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

1 Ответ

0 голосов
/ 20 февраля 2012

Я бы определенно согласился с Джейсоном: сократите ваш 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 использует безопасный метод base64 url .Кроме того, некоторая справочная информация о соль .
  • Если ваш адрес электронной почты имеет длинный идентификатор или должен быть также закодирован в URL-адресе, или приведенное выше еще недостаточно короткое, подумайтееще более короткая форма.В основном это приведет к созданию собственного сокращения URL.Непосредственно перед тем, как вставить ссылку в электронное письмо, сгенерируйте случайную строку из 5 символов.Вставьте эту строку в качестве ключа в memcached (или в базу данных) с исходным URL-адресом в качестве значения.Тогда ваш URL может быть http://domain.com/redirect?key=rT-tW.Когда вы увидите это в своем приложении, просто получите исходный URL-адрес из базы данных / memcached и перенаправьте туда.

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

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

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

...