Задать вопрос
  • Защита ТГ webapp от мультисессий?

    Tkreks
    @Tkreks Автор вопроса
    Everything_is_bad,
    еще раз, почему вдруг ты сделал возможный что перебор user id дает подключится этому user id? только user_id и какие-то данные его идентифицирующие, только так.

    ws это протокол. Никакой защиты у вебсокета по умолчанию нет. Вся защита может быть выстроена на стороне сервера, ну либо по глупости разработчика, можно выстроить защитные механизмы на клиентской стороне. И всю валидацию отдать клиенту.
    Есть страница сайта. Есть ws сервер. Это две отдельно стоящие сущности, которые в частности друг от друга никак не зависят. Сайт откроется (но на нём не будет части данных без WS). WS примет connect даже если сайт не работает (к ws же можно подключиться не только с определенного сайта, а откуда угодно, можно сделать подключения к ws на своей странице, или клиентом WS сделать подключение, да даже в консоли браузера на blank:page можно написать скрипт для подключения к любому ws серверу).
    Я перечитал весь диалог, и вижу один сценарий, который вероятны Вы и подразумеваете.
    1) Открывается mini app (по сути страница сайта)
    2) Идет проверка initdata пользователя ТГ
    3) Если проверка подтверждает что пользователь из телеги, только после этого открываем ws соединение с ws сервером. В момент открытия соединения, клиент передает дополнительный payload в виде ID пользователя telegram
    4) ws сервер привязывает id сессии к id пользователя, далее id пользователя не требуется.
    5) Если происходит отвал соединения или обновление страницы, мы заново идентифицируем пользователя и связываем id пользователя с id сессии.
    Я верно Вашу идею понял?
    Написано
  • Защита ТГ webapp от мультисессий?

    Tkreks
    @Tkreks Автор вопроса
    Схема
    683df2c8cb253103443101.png

    1. Пользователь инициирует подключение к WS серверу и передает свой user_id
    2. WS сервер отвечает и передает session_id подключения
    3. Анонимный пользователь инициирует подключения к WS серверу, в котором передает ЛЮБОЙ user_id
    4. Сервер отвечает присвоением другого id сессии.
    Если мы передаем на WS сервер голые данные с user_id, как сервер должен отличить, пришли они от легитимного пользователя или анонима? Как WS сервер будет отличать авторизованного пользователя, от анонимного, который перебирает user_id ?
    Я понял о чем вы пишите, что не нужно данные авторизации передавать в каждом запросе. Достаточно первично проверить что они валидные, и далее уже упираясь на session_id - мы проверяем легитимность запроса.
    Мой вопрос в другом. Как используя ТОЛЬКО user_id мы будем защищены от перебора этого самого user_id ? Когда злоумышленник будет инициировать подключение к WS и подставлять случайные id ?
    Т.е. речь идёт об инициации подключения, в которой на WS сервер мы передаем тот самый id пользователя из ТГ ?
    Аналогично в http - сделать страницу в которой нужно ввести только свой логин (без пароля), далее у нас запишется кукиса по которой сайт будет считать меня username , и я буду прекрасно видеть все данные, который username оставил на странице. Правда в случае с кукисой пользователь может её изменить. В случае с session_id такой трюк не прокатит.
    Написано
  • Защита ТГ webapp от мультисессий?

    Tkreks
    @Tkreks Автор вопроса
    зачем?

    А зачем мне хранить 2 сессии одного пользователя, когда задача стоит не допускать 2 одновременных сессии одного пользователя.
    почему вдруг перебор user_id должен на что-то влият, почему вдруг знание user_id позволит подключиться под этим юзером?

    Потому что для отрисовки страницы приложения я использую данные из websocket. Большинство данных получаются из ws. я не говорю про html/css/js, я говорю про данные условно - псевдоним, баланс, текущий счет, достижения.
    не нужно упрощать jwt, нужно либо его использовать, либо нет.

    Не использую. Использую своё решение, в котором хочу понять слабые места.
    Написано
  • Защита ТГ webapp от мультисессий?

    Tkreks
    @Tkreks Автор вопроса
    Everything_is_bad,
    потому что session_id должен быть привязан к id пользователя, это как бы основы. По session_id сервер восстанавливает user_id. Ну и сразу не нужно гонять session_id по вебсокету, его достаточно использовать в самом начале, при создании коннекта.

    Привязка на бэке есть. Ситуация в другом, в случае переподключения пользователя (закрыл-открыл, или refresh), сессия закрывает и открывается новая. Старая сессия на бэке удаляется, новая записывается. Даже если не будем всё время гонять по вебсокету id пользователя, как нам проверять валидность\легитимность данных от пользователя? По session_id, но это будет вторичный признак. Если произойдет закрытие\refresh
    - session_id - меняется. В таком случае, предположим я злоумышленник - я делаю "event": "connect" и перебираю user_id.
    небольшое отступление
    Т.к. я допускаю что websocket сессия может зависнуть (ну отвалился интернет допустим), и не пришел "event":"disconnect", в таком случае лучше реализовать логику с перезаписью активной сессии. Пинг - понг реализован, чтобы закрывать неактивные сессии старше 2 минут. на самом деле немного сложнее, после подключения проверяем доступность по нарастающей - 10,15,20,40,60,120 сек
    Получается что злоумышленник перебирая id сможет отключать пользователей, и переключать активную сессию на себя.
    Просто смотрите, если я Вас правильно понял, то Вы имеете ввиду следующее:
    После проверки initdata от ТГ и валидации user_id, создаем websocket соединения отправляя туда только user_id? Если я правильно понял Вашу задумку, в таком случае меня смущает что этот user_id ничем не защищен, и в случае перебора - пострадают пользователи, т.к. 1) их будет выкидывать из текущей сессии 2) данные от их аккаунта (в приложении) будут подгружаться туда, где их быть не должно. Или же Вы не дописали и подразумеваете дополнительные проверки?
    а в jwt обычно прописывают user_id, поменять ты его не сможешь, токен будет невалидный
    Да, я знаю про jwt, в моём случае используя собственные знания - я еще более упростил эту задачу и получаю результат, как если бы я использовать jwt. В моем случае - все данные находятся в зашифрованном виде, и расшифровывать их может только бэк. В случае невозможности расшифровки - запрос отбрасывается на страницу авторизации. В случае даже гипотетического перехвата этого ключа, при попытке открыть /app - перекидывает на /one, т.к. в зашифрованном виде есть некий reload, который не позволит второй раз открыть страницу.
    Не совсем понял -
    Ну и сразу не нужно гонять session_id по вебсокету, его достаточно использовать в самом начале, при создании коннекта.

    session_id создается по умолчанию в event connect и далее всегда передается от пользователя к серверу, ну точнее у меня в nodejs во всяком случае, всегда передается session_id, хотя в js на фронте - вообще не прописано его передавать. Т.е. в дебаге я всегда по умолчанию вижу session_id при любом типе сообщения websocket от клиента. Если имели ввиду user_id - тогда понял о чем Вы и полностью согласен.
    Написано
  • Защита ТГ webapp от мультисессий?

    Tkreks
    @Tkreks Автор вопроса
    Everything_is_bad, Спасибо за Ваше мнение. Я не с точки зрения критики, а чтобы разобраться.
    Предположим злоумышленник изучает как работает приложение и его внутренние механизмы. Очевидно что в консоли он не увидит POST/GET запросы, тогда начнет ковырять WS. Включит логирование сети, увидит события ws в котором передается session_id соединения, id пользователя . Что помешает поменять id пользователя на свой, таким образом закрыв сессию реальному пользователю и получив доступ к данным пользователя? Это можно будет сделать прямо в браузере в консоли, прописав небольшой js который будет осуществлять такую подмену. Или я чего то не понимаю?
    Как основу я использовал статейку хабра, но вместо jwt использовал собственную реализацию access token.
    Написано
  • Защита ТГ webapp от мультисессий?

    Tkreks
    @Tkreks Автор вопроса
    Достаточно сразу коннетиться к вебсокет, а на сервере разрешить только один коннект от телеграм id

    Мне не очень нравится эта идея, т.к. в случае с зломышленниками, достаточно не сложно будет заняться перебором аккаунтов по ID. Поэтому сделан дополнительный ключ авторизации, который подтверждает что пользователь это тот пользователь, который изначально открыл приложение, а не который подменил WS данные в результате шаловливых ручек
    Написано
  • Защита ТГ webapp от мультисессий?

    Tkreks
    @Tkreks Автор вопроса
    как это вообще связанно с для масштабируемостью?

    Разнесение серверов авторизации и серверов приложения на разные инстансы. В случае падения серверов авторизации - уже действующие клиенты останутся подключенными.
    А зачем эти one, two, бессмысленное шифрование, какой-то непонятный набор действий

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

    rPman, как правило для конференций используют webrtc для прямой связи между участниками чтобы уменьшить нагрузку на канал сервера. В том числе и вотсап использует, относительно недавно появилась настройка которая принудительно отключается webrtc и пускает трафик через сервера меты, т.к. через webrtc можно раскрыть ip собеседника, но как правило это сказывается на качестве связи
    Написано
  • Как располагать стойки / шкафы в цоде?

    Komrus, на боровой 7с10, но тоже тир3.
    Да холодный контур с фальш пола
    Мы уточняли у инженеров что за шкафы такие - нам сказали что:
    1) они имеют свою систему охлаждения
    2) доп защита
    Из того что мы поняли, эти шкафы имею свою дополнительную систему охлаждения с выдувом в вентиляцию, я просто не особо интересовался, но может это как то поможет ТС - типа серверный холодильный шкаф.
    Основная стойка потребляет 21кВт, по мониторингу.
    То что ЦОДы к топику отношения не имеют - не спорю, просто наблюдение - видел какой то серверный шкаф, выглядящий как холодильник, только для серверов. В теме стоек не силен, лично мое мнение - должна быть профессионально оборудовано помещение для размещения серверов с резервированием всего (ввод, охлаждение, интернет, влажность, контроль доступа)
    Историю про уборщицу, которая отключила розетку чтобы подключить пылесос - я видел вживую)
    У нас есть профессионально спроектированное помещение в офисе, проектировали и строили его правда в 2015-х года - 4 стойки (не считая коммуникационных), и одной стойки с батареями, как раз устроен холодный коридор с подачей холодного воздуха из пола, рециркуляции воздуха нет, в качестве охладителя стоят промышленные кондиционеры 3шт. с контролем влажности. , так вот на 2015 год, стоимость проектирования и реализации такого помещения стоила порядка 15 млн рублей (для помещения в 20кв.м). Мы нужного опыта не имеем в проектировании таких помещений - поэтому нанимали спецов. Просто на тот момент это были просто гигантские деньги, а на текущий момент я боюсь представить сколько это будет стоить...
    Написано
  • Как располагать стойки / шкафы в цоде?

    У нас один из цодов на авиамоторной, у нас там пара шкафов в аренде. В машинном зале где наши шкафы, есть ряд, там штук 5-6 стоят АРС шкафы, полностью закрытые (сзади не знаю), но вверх от них идет вент.гофра и входит в вентиляционный канал. Никогда не понимал смысла таких шкафов в цоде.
    С учетом того что у нас там 2 стойки 47u, до отказа забитые оборудованием, самая нагруженная стойка -
    20х2 юинтовых серваков - 2х1.5 квт б.п.
    2 сфп коммутатора, 2 rj45 коммутатора, органайзеры. ПДУ вмонтированны в шкаф.
    Потребление думаю понятно, проблем с перегревом нет. Холодный коридор
    Написано
  • Есть ли движки с web интерфейсом для связи через телеграм бот?

    Если говорить что нужно как то учитывать и в дальнейшем анализировать - я еще как то соглашусь с црм чистемой. А если функционал црм не нужен - то для бота поддержки очень жирно выходит, что по деньгами, что по ресурсам (если говорим про коробку).
    Я за 3 дня написал бота, который видит все сообщения клиента и которому можно написать - и все это через веб. Могу поделиться, но для работы потребуется бд на mysql
    Написано
  • Какой метод используется в вебхуке для получения изменения стадий сделок?

    Ndfiuenbufiw, да мне тоже это прям нужно было. Но у меня хотя бы альтернатива была - БД коробки.
    Написано
  • Какой метод используется в вебхуке для получения изменения стадий сделок?

    Подпишусь на вопрос.
    Мне через вебхуки\рест - не удалось прочитать таймлайн события. В итоге я у себя сделал через БД, но это актуально для коробки
    Написано
  • Какой сервер выбрать под описание?

    Искатель, у нас развернут стахановец - домен не требуется. Но если уже есть домен, это хорошо, в целом при росте компании - будет меньше гемора все на него переделывать. А так не слушайте, свыше 20 сотрудников домен упрощает администрирование, особенно при шаре и текучке кадров. Я бы рекомендовал обратить внимание на платформу от supermicro.
    Crazy_Cooler, HP и DELL ничего против не имею, но зачем переплачивать? Не знаю как сейчас у HP, но когда мы выбирали вендора 5 лет назад - у HP совместимость только с HP процами была, оперативку тоже абы какую не поставить, а переплачивать за intel platinum только с шильдиком HP 40% ой как не хотелось. В итоге взяли платформу intel и накатили туда нужные нам комплектующие.
    Написано
  • Не могу загрузится в линукс после установки, что делать?

    Александр, если он не меняет тип загрузчика - при установке fedora например, она бы точно поставилась бы в uefi, тогда странно что система не видит. Другая проблема, что система в принципе не видит другой диск, отличный от usb hdd
    Написано
  • Не могу загрузится в линукс после установки, что делать?

    Hulk_228, после смены boot mode другой диск не видеться?
    Если представить ваш скриншот в теме, если допустим нажать 2 раза стрелку вниз (навести на диск) и нажать enter, случаем не откроется меню выбора дисков ?
    Написано
  • Как поймать камеры из другой локальной сети?

    Drno, вот видимо и вся разница у нас тоже серваки в РФ, конкретнее VPN шлюз в ЦОДе в Мск, у нас просто чуть пожирнее, 3 стойки со своим оборудованием и серверами под сорм. Может поэтому мы может быть в какой то доверенной зоне для впн. Просто еще знаю что в одном из банков (достаточно известный) для сотрудников используют openvpn для доступа в инфраструктуру банка, и в целом нареканий по работе нет. Поэтому мне удивительно слышать что есть какие сбои. С другой стороны - был небольшой период времени когда некоторые клиенты не могли подключиться и вероятно проблема была связана с ТСПУ, но небольшие перебои наблюдались у небольшого количества клиентов, да и сама проблема продлилась не больше месяца. Потом опять как работало стабильно так и работает. Я то не в коем случае не настаиваю на своем решении, просто всегда интересно поговорить человеком в теме, услышать его опыт и поделиться своим)
    Написано
  • Не могу загрузится в линукс после установки, что делать?

    Hulk_228, а федору куда ставите? На внутренний диск? Судя по тому что я вижу - умер внутренний диск
    Написано
  • Не могу загрузится в линукс после установки, что делать?

    Hulk_228, если отключить usb hdd и зайти в биос в бут какая картинка будет?
    Не знаю как на вашем ноуте, но судя по тому что я вижу - система видит только один диск и это внешний usb hdd
    Возможно есть вкладка disk boot priority, и там нужно вверх выставить нужный диск
    Написано