Я разрабатываю «Google Alerts» для сервиса GitSpo. Я не понял, что это точно такое, но сервис развивается быстро и людям он нравится. Большой частью GitSpo является сбор данных с различных социальных сетей: Twitter, LinkedIn и Stack Overflow. Я обратил внимание на одну вещь: Stack Overflow использует сервис Gravatar для аватарок в пользовательских профилях.
Gravatar — это сервис, ассоциирующий картинку (в нашем случае — аватар) с вашим E-Mail адресом. Эта картинка может быть использована другими сайтами (в нашем случае это Stack Overflow) для отображения аватара для людей, заходящих на сайт.
Аватар пользователя находится путем хэширования его E-Mail адреса. Например, мой E-Mail адрес gajus@gajus.com. Любой, кто имеет мой E-Mail может сгенерировать ссылку на картинку с моей аватаркой. Например, https://www.gravatar.com/avatar/74a5bd659b3a8af09a336a932eebe3b1
Получаем:
Gravatar был запущен в 2007 году и быстро вырос частично потому, что он используется как дефолтный сервис для аватаров, которые используются на WordPress сайтах. Отличная идея — загрузи аватар один раз и он будет автоматически устанавливаться на всех сайтах. Просто обнови аватар на Gravatar и картинка твоего аватара поменяется сразу на всех сайтах. Но к сожалению, алгоритм шифрования, который они выбрали оказался совершенно небезопасным.
Ссылка на картинку генерируется MD5 хэшированием вашего E-Mail адреса, перед этим производится перевод в нижний регистр и удаление пробелов.
md5('gajus@gajus.com') === '74a5bd659b3a8af09a336a932eebe3b1'
Использование MD5 для хэширования личной информации было плохим выбором даже в то время. На сегодняшний день, база данных MD5 шифров составляет более, чем 90 триллионов хэшей. Более того, половина E-Mail адресов содержит ограниченный диапазон символов (/^[a-z@\-.]+$/) и достаточно легко предсказать их окончания, например, такой популярной домен как
@gmail.com.
Я решил провести эксперемент и взял 1000 хэшей профилей Stack Overflow и использовал один из сервисов для дешифрования. Итог составил 721 E-Mail адрес, т.е. 72% успеха.
Однако, интересно использовать этот кейс не только для получения e-mail адресов. Многие e-mail адреса разработчиков уже публично доступны так, как почтовые адреса пользователей GitHub'a могут быть получены из их профилей, коммитов, файлов и лицензий или даже прямо в комментариях к коду. GitSpo имеет данные о всех публично доступных профилях и репозиториях GitHub, так что я смог провести хэширование адресов и сравнить их с хэшами Stack Overflow. И я нашел 1000 из них.
Нужно отметить, что не только Stack Overflow использует Gravatar, точно также им пользуются WordPress, HootSuit, TechDirt, Disqus и не только. Stack Overflow выделился среди остальных, ведь это ресурс, на котором основную аудиторию составляют разработчики и меня удивило то, что такая вещь прошла сквозь щель.
На самом деле, на сегодняшний день Stack Overflow не многое может сделать — достаточно много сайтов на просторе интернета, которые являются копией Stack Overflow. Однако, было бы отлично отказаться от использования Gravatar для пользователей, регистрирующихся в первый раз.
legolegs
Ну по факту это gravatar сливает email. И его надо патчить — менять хеш, солить.
PS опасность слива email в наше время даже не в десятке угроз, имхо.
rdnve
А еще при желании
и по велению левой пяткиможно генерировать альясы вида habr.com.mail@domain.xyz; удобно, если через некоторое время начинают приходить левые письма, то сразу понятно, кто слил. -)difiso
Для этого есть Email Tagging. Это вроде как не описано стандартом, но тот же GMail их поддерживает: письмо на example+sometag@gmail.com упадет в ящик example@gmail.com. Плюс Google автоматом для безопасности убирает точки, т.е. e.x.a.m.p.l.e@gmail.com и example@gmail.com это один и тот же ящик.
The_Kf
К сожалению, не все формы поддерживают знак + в local-part. Только почта на своём домене и спасает: указываю любой, всё валится в основной ящик