Утопающие не собираются спасать себя самостоятельно, поэтому предлагаем вам сделать четыре простых шага к увеличению безопасности посетителей вашего сайта.
Начитавшись откровений Сноудена, решили немного поработать. Расскажу про наш опыт реализации, последствия и реакцию пользователей.
Шаг 1. Без регистрации
Если у пользователя нет учетной записи, то ее не сломают и не украдут. Основной функционал сайта должен быть доступен без регистрации. Если по каким-то причинам регистрация для некоторых пользователей нужна – используем OAuth по максимуму. Пусть у гугла с вконтакте голова болит от одинаковых паролей, а не у вас. Делается за пару часов по инструкции (тут много ).
Последствия такого шага: больше «одноразовых» профилей.
Шаг 2. Только SSL, только хардкор
В эпоху тотальных логов юзеры могут опасаться использовать ваш сайт только потому, что не хотят, что бы кто-то знал о том, какие именно страницы они просматривали, что они искали в вашем поисковике, какие статьи читали, какие сообщения на форуме оставляли. Особенно важно если у вас много разного (как у нас) контента. Решение простое – включаем https всем.
Бесплатный сертификат получаем например тут.
Берем с официального сайта свежий nginx, ставим, правим конфиги.
Пример конфига:
server {
listen 80;
listen 443 ssl;
ssl_certificate ТУТ_ФАЙЛИК.pem;
ssl_certificate_key ТУТ_ФАЙЛИК.key.decr;
location /socket.io/ {
proxy_pass ХОСТ:ПОРТ_где_крутится_signalmaster;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
location / {
# для тех кто вдруг не по https
if ($ssl_protocol = "") {
rewrite ^ https://$server_name$request_uri? permanent;
}
proxy_pass http://rp_ups;
}
server_name rospravosudie.com www.rospravosudie.com;
}
upstream rp_ups {
# тут наши апстрим-сервера для веба
}
Проверяем все ли работает.
У вас пропадут картинки со сторонних ресурсов, ролики ютуба и прочие, которые вы (или юзеры) размещали с указанием протокола доступа http://. Лечится достаточно просто – автозаменой http на https в текстах. Если сторонние ресурсы “не умеют ssl”, то картинки пропадут, поэтому лучше закэшировать их к себе заранее. Удобный хинт – всегда использовать // ссылки без указания протокола – по умолчанию браузер будет пытаться открывать их по текущему протоколу (https).
Так же потребуется обновить код счетчиков статистики – Google Analytics, Liveinternet и Яндекс.Метрика замечательно работают по ssl. Проблем с кодами AdSense не возникает, про Яндекс и другие системы – не пробовали.
Необычных последствий с индексацией поисковиками не наблюдается – и Google и Яндекс индексируют как раньше.
Результат: провайдеры не видят какой контент смотрят ваши посетители (и не только провайдеры). Продвинутые пользователи тихо радуются, остальные ничего не замечают.
Примечание: нагрузка на сервер возрастает незначительно, на единицы процентов, на уровне погрешности.
Шаг 3. Cryptico
Если вы не храните сообщения пользователей, их не украдут никогда. Если вы не можете их прочитать – большинство злоумышленников тоже не смогут.
Для сохранения конфиденциальности в общении между пользователями мы реализовали p2p-шифрование на клиентах (в браузере) и не сохраняем закриптованный текст (в идеале его надо пускать напрямую).
В чатах шифруем сообщения между пользователями с использованием RSA-1024. Для этого используем например библиотеку cryptico (лежит на гитхабе github.com/wwwtyro/cryptico), ключи обновляем при каждом сеансе связи.
Чат работает на node.js и socket.io (примеры чатов есть на Хабре). Сигнальный сервер спрятан за nginx (свежий nginx умеет проксировать вебсокеты), через nginx же реализован ssl для сигнального сервера.
Побочный эффект – отсутствие истории сообщений. Невозможно самим узнать о чем болтают юзеры. Сообщения можно отправлять только в онлайн.
Шаг 4. Поднимаем зеркало в i2p
Некоторые ваши пользователи могут хотеть скрыть сам факт посещения вашего сайта (по личным причинам). Не стоит усложнять им задачу.
Пользователей TOR и I2P в рунете примерно одинаковое количество (около 15-20 тысяч ежедневных живых людей), TOR-юзеры справляются самостоятельно, поэтому имеет смысл поднять зеркало в I2P.
Делается это достаточно быстро, по инструкции (http://habrahabr.ru/post/158559/ и habrahabr.ru/post/97996/)
Примечание: не забудьте удалить все лишние javascriptы, коды статистики, вызовы чужих сервисов, картинок и т. д. и т. п. из кода «зеркальной версии», что бы не скомпрометировать случайно ваших посетителей. Разумеется, noscript должен быть установлен у каждого пользователя I2P, равно как и заблокирован доступ к внешним сайтам, но, как показывает практика, обратная ситуация встречается довольно часто.
Последствия: вы не понимаете, кто все эти люди?
В целом же шифрование — это легко и приятно!
В общем, призываем вас сделать рунет чуть-чуть более приватной зоной. Учитывая последние тенденции по внедрению DPI, 12-часового хранения трафика, блокировок без суда-и-следствия в борьбе за копирайт — может пригодится (надеюсь нет).
P.S.
Попробовать чат и видео-звонки можно тут.
P.P.S.Если хотите прочитать про работу webrtc в I2P - плюсаните в карму разработчику (codemaster).
P.P.P.S. Конструктивные параноидальные предложения, критика и вопросы от «людей в шапочках из фольги» приветствуется.
Автор: gsuvorov