Обновить

Как один комментарий на Хабре перевернул архитектуру моего мессенджера

Уровень сложностиСредний
Время на прочтение8 мин
Охват и читатели13K
Всего голосов 11: ↑10 и ↓1+14
Комментарии17

Комментарии 17

без сарказма, по мессенджерам реальный дефицит. пили не останавливайся

Спасибо! Именно это и держит. Когда видишь, что продукт кому-то нужен — руки сами тянутся к клавиатуре. Продолжу, обещаю.

XMPP, Matrix, тысячи их

ну это же.. ..база??? Безопасность на фронт-енде это вообще основа основ как не надо делать, тут даже бы нейросеть подсказала что так нельзя.

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

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

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

А, ну и еще надо будет как то людей в него завлечь, мессенджер без людей никому не нужен.

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

Как такового плана нет. Пульс это весьма нишевый продукт на мой взгляд, для тех кто устал от информационного шума. Хотя мне его просто интересно делать :)

да клиентов как грязи разных

есть даже полноценные фронт-енды аля социальная сеть по типу https://movim.eu/

с XMPP проблема в том что он огромный и массивный - поднять у себя selfhost целое приключение где чисто в параметрах настройки можно потонуть

@gerbert_MX Спасибо за честность и конкретику. Вы безусловно правы: безопасность на клиенте — это одна из классических ошибок, которые я увы упустил на раннем этапе. В 0.9.48 мы перенесли проверку доступа к истории и диалогам на бэкенд через единый ConversationAccessService, а публичные DTO теперь не содержат email. В общем - уже реализовано :)

По поводу открытости: я не против открытого кода в будущем, но пока «Пульс» — это мой личный проект, и я хочу сначала довести архитектуру до такого состояния, чтобы открытие не превратилось в «посмотрите, как здесь всё страшно», а там и правда сейчас есть страшные решения, которые мне еще предстоит переделать... Стыдно - если кратко. А децентрализация — это интересный вызов, но для начала нужно пройти текущий этап: безопасность, стабильность, UX. Если проект выживет и окрепнет — можно будет подумать и об этом. Ещё раз спасибо за откровенность.

Если бы не было вначале кривой саморекламы , заходило бы лучше .

Сначала ценность потом реклама

Учту в дальнейших статьях, я никогда не писал про свои пет-проекты на хабре, так только какие-то технические кейсы на старом акке были, поэтому прошу прощения. Спасибо, что подсветили!

«Я уже нашёл достаточно. Если копнуть глубже — найду ещё.»

врубить параноика в данной ситуации конечно хорошо, но это совершенно точно не то что я имел ввиду.

Проблема с поиском уязвимостей в том что это не слишком тривиально, когда делаешь условный 15-минутый забег на тестирование функционала. Можно наверное за это время успеть собрать несколько векторов атаки из разряд low hanging fruit - какие-нибудь инъекции в полях, XSRF, но у меня маловато опыта, чтобы такое провернуть с полпинка и не сказать чтобы много мотивации этим заниматься. Но то что это заставило задуматься о моделях угроз - определённо хороший шаг.

Теперь пришло время заниматься безопасностью загрузок:

про форк бомбы и rarjpeg ещё подумайте

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

— 172 зарегистрированных пользователя;

вот тут вопрос - зарегестрированные пользователи - это те что с email или вообще любой? rate limit на регистрацию есть? кажется можно простым скриптом заспавнить тысячи пользователей без проблем. отдельный вопрос про disposable email а ля maildrop.cc, dropmail.me и прочие shitmail.

Возвращаясь к комментарию: это будет ultimate вариант аудита, когда ваш код будут ломать опираясь на код.

Спасибо, что заглянули и сюда, и снова потратили время, которое в нынешнее время на вес золота.

Вы отчасти правы, мой «параноик» был скорее реакцией на сам факт: «кто-то взял и нашёл проблемы». То есть я понял для себя это так - не столько конкретные уязвимости, сколько общий подход, на который я подзабил спустя 2 недели после начала разработки) Хотя возможно я ошибаюсь...

По вашим новым пунктам:

  • Безопасность загрузок - уже в роадмапе (0.9.52). Fork bombs и gapreg (я правильно понимаю, что речь о расширениях/MIME-атаках?)

  • Фаззинг публичных эндпоинтов - вот это кстати очень интересная идея. Надо будет поковыряться и опасные точки определить/проверить/закрыть... Я даже не думал пока еще в эту сторону. Все хочу еще до различных автотестов добраться, но пока, увы, рук всего 2...

  • Rate limit на регистрацию - да, вот рейт лимитер в 0.9.49 уже вышел - на авторизацию, восстановление (к слову переделал попап в маленький баннер, а подтверждение входа вывел в "Устройства" в профиле), поиск. А вот на регистрацию кстати нет... Так что да - щас еще остается потенциальная дырка на ней, что не есть хорошо. Вы меня снова спасаете!)

Насчёт открытости кода - пока не готов, потому что стыжусь - надо еще подчистить хвосты, разделить модели. Проводить аудит такого кода - это кровь из глаз. Но эта идея остаётся в голове. Я думаю, что когда-нибудь я доберусь до вида - не стыдно показать публично.

Ещё раз большое спасибо!

gapreg

ze what? я вроде не опечатался. Речь именно за rarjpeg - приклеивание архивов(и не только) к картинкам. Меняешь расширение с jpg на rar/exe/msi - получаешь с виду новый бинарь, который не является картинкой. Поэтому в случае загрузки картинок имеет смысл обрезать всё что к картинке не относится. Как-то так обычно в соц.сетях имеются разные варианты загрузок - картинкой, документом, файлом. Mime атаки это несколько иной зверь.

Про gapreq - промахнулся по клавишам, спешил.

Но это не меняет сути, таких проверок еще нет и это еще стоит реализовать.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации