Простые шаги для безопасности ваших юзеров: OAuth, SSL, P2P-чат с RSA, гейт в i2p

в 10:58, , рубрики: Без рубрики

Утопающие не собираются спасать себя самостоятельно, поэтому предлагаем вам сделать четыре простых шага к увеличению безопасности посетителей вашего сайта.
image
Начитавшись откровений Сноудена, решили немного поработать. Расскажу про наш опыт реализации, последствия и реакцию пользователей.

Шаг 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 на https в текстах. Если сторонние ресурсы “не умеют ssl”, то картинки пропадут, поэтому лучше закэшировать их к себе заранее. Удобный хинт – всегда использовать // ссылки без указания протокола – по умолчанию браузер будет пытаться открывать их по текущему протоколу (https).

Так же потребуется обновить код счетчиков статистики – Google Analytics, Liveinternet и Яндекс.Метрика замечательно работают по ssl. Проблем с кодами AdSense не возникает, про Яндекс и другие системы – не пробовали.

Необычных последствий с индексацией поисковиками не наблюдается – и Google и Яндекс индексируют как раньше.

Результат: провайдеры не видят какой контент смотрят ваши посетители (и не только провайдеры). Продвинутые пользователи тихо радуются, остальные ничего не замечают.

Примечание: нагрузка на сервер возрастает незначительно, на единицы процентов, на уровне погрешности.

Шаг 3. Cryptico

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

Для сохранения конфиденциальности в общении между пользователями мы реализовали p2p-шифрование на клиентах (в браузере) и не сохраняем закриптованный текст (в идеале его надо пускать напрямую).

В чатах шифруем сообщения между пользователями с использованием RSA. Для этого используем например библиотеку 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. Если знаете более надежные аналоги cryptico — пишите в комментарии.

upd. возрождение из небытия, не удивляйтесь :)

Автор: gsuvorov

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js