Roman
это же анти-безопасность
Roman
а так если он мне обрубил сессии, то и себе обрубил, а пароля не знает - вот и приехал голубчик
R
Приветы, чем пользуетесь для загрузки одного или больше картинок, файлов, документов etc ?
Roman
закрывать все сессии намного безопаснее и к тому-же это можно реализовать на JWT'ах, у каждого токена есть registration datetime. При закрытии всех сессий на сервера ставим флаг "все токены пользователя X зарегистрированные после datetime Y не принимать" и инвалидируем refresh токен.. и всё, никаких бд сессий
Yaroslav 🇺🇦
У меня кусок меседжей оборвало? Не могу понять где начинается диалог про сессии
Anonymous
Там, где идёт разговор про функцию обрубить сессии
Roman
Слухайте, а в чём смысл функции "отключить все сессии кроме данной"? Если мой мобильный девайс попал в руки злоумышленнику, то он сможет отрубить все мои сессии, затем изменить пароль и не дать мне перезайти... не лучше ли отрубать все сессии включая актуальную?
Roman
но про пароль я добавил:
Roman
хотя нет, изменить пароль он не сможет ибо актуального пароля не знает, но суть та-же, почему он сможет обрубить все мои сессии а его сессия останется..
Anonymous
Одного не пойму
Anonymous
Как ты собираешься инвалидировать сессии
Roman
закрывать все сессии намного безопаснее и к тому-же это можно реализовать на JWT'ах, у каждого токена есть registration datetime. При закрытии всех сессий на сервера ставим флаг "все токены пользователя X зарегистрированные после datetime Y не принимать" и инвалидируем refresh токен.. и всё, никаких бд сессий
Anonymous
То есть тебе надо где-то хранить пользователей, доступ которым ты запрещаешь
Anonymous
На словах ты Лев Толстой, но хранить то тебе "инвалидов" надо
Roman
нужен лишь один флаг на сервере, это 24 байт {UserId -> SessInvalidationDatetime}
Anonymous
Лол
Roman
только один флаг
Anonymous
Но при этом ты добавляешь запрос к бд
Anonymous
Что флаг
Anonymous
Jwt подразумевает отказ от постоянных запросов к бд
Roman
к локальной бд которую кэшировать можно без провлем, т.е. effectively это запрос в ОЗУ
Anonymous
Ой все
Anonymous
Начались костыли
Roman
ты хоть в тему въехал?))
Anonymous
Смысл тогда юзать jwt
Anonymous
А что я не по теме говорю?
Anonymous
к локальной бд которую кэшировать можно без провлем, т.е. effectively это запрос в ОЗУ
Говорил про безопасность и тут же предлагаешь внедрять в проекты такую очевидную уязвимость
Roman
Смысл тогда юзать jwt
чтоб не требовался Shared Cache... сессии они тем и плохи что одна сущность в кластере отвечает за сессии и horizontal scalability усложняется.. а инвалидировать local cache for remote resource это сложнее чем: на сервере хранить флаг, ибо это не remote resource
Anonymous
Ну вот заддосить тебя после такого инвалидами очень просто например
Roman
это как это?
Anonymous
Ну голову включи
Ruslan
Привет, покажите плс, как вы компоненты со слотами тестируете?
Roman
Ну голову включи
да ты поясни до конца, не люблю экстрасенса роль играть
Anonymous
да ты поясни до конца, не люблю экстрасенса роль играть
Хранить инвалидов в озу -> заддосить инвалидами. Догадывайся
Roman
Хранить инвалидов в озу -> заддосить инвалидами. Догадывайся
ты не понял, мы НЕ храним токены в озу, а один флаг на 24 байт на пользователя, ты хоть 100500 раз в секунду сессии закрывай, флаг от этого не растёт
Anonymous
Такое чувство, что у тебя ограничение на сервере в одного пользователя
Roman
флаг указывает лишь токены какого пользователя с какого времени не принимать
Anonymous
Ну раз ты говоришь про одного юзера
Roman
даже 10кк пользователей если вдруг в момент все свои сесии завершат - это 200 мб
Nikita
хм, ребята, а created разве может быть async функцией?
Anonymous
И сколько будет длиться эта атака?
Anonymous
Максимум 10 минут
Nikita
хуки могут быть промиссами?
Roman
хм, ребята, а created разве может быть async функцией?
created это лишь callback после инициализации, если речь идёт об SSR - то сервер ждать created не будет
Nikita
да у себя в проекте увидел async fuction created()
Anonymous
Кек
Roman
И сколько будет длиться эта атака?
дак в чём опасность?) это же не blacklist токенов который действительно бы мог расти и засорять память, это статичный флаг
Nikita
я почему-то избегал использовать async функции в хуках
Yaroslav 🇺🇦
Ты же всё равно будешь обращаться в базу каждый раз. Типо а не протухли ли токены. Много серверов, вспоминаем CAP теорему в части Consistency и Partition tolerance
Roman
Sasha 💲🌚✖️ критика это именно то чего я и искал, но она то обоснованная должна быть
Roman
Ты же всё равно будешь обращаться в базу каждый раз. Типо а не протухли ли токены. Много серверов, вспоминаем CAP теорему в части Consistency и Partition tolerance
не к центральной, а к локальной, это разница значительная, ибо кэшировать в ОЗУ очень просто, т.е. это фактически считывание памяти
Yaroslav 🇺🇦
Много микриков, все микрики хранят в себе состояние. Синхронизировать как?
Roman
Ну он говорит про то шо запрос сильно меньше. Хотя я хз тогда и юзера сверять надо
в смысле? токен содержит в себе user_id и registration_date, т.е. всё что тебе нужно для принятия решения у тебя всё на сервере, к внешним ресурсам обращаться не нужно
Anonymous
Тебе задали вопрос про масштабируемость
Anonymous
Как называлась та штука наподобие общей шины
Anonymous
Забыл
Roman
Anonymous
Лол
Anonymous
Да, поставить vuex на серваки
Anonymous
И гонять по ним данные
Yaroslav 🇺🇦
Синхронить сервера это проблема.
Anonymous
Ахахахах
Anonymous
Максим
Да, поставить vuex на серваки
Я не въехал, что вопрос про серваки
Максим
В следующий раз буду перечитывать историю, прежде чем написать 😆
Roman
Синхронить сервера это проблема.
ну как я уже говорил, либо центральный сервис сессий - single point of failure - scales vertically - higher round-trip time либо локальный флаг инвалидации сессий - distributed synchronisation problem - scales horizontally - negligible round-trip time
Anonymous
Давайте уж полностью на английском говорить, а то сейчас язык сломаю
Roman
однако если использовать WSS вместо HTTPS подключений то round-trip time неважно, ибо аутентификация происходит лишь раз при создании связи в то время как с HTTPS она происходит при каждом запросе
Yaroslav 🇺🇦
Ну и возвращаемся к ситуации. Которая звучит примерно так: Если у тебя маленькое приложение и сколько-то там юзеров. То храни хоть по фазе луны. Если микросервисов много, то дабы не застрять в болоте синхронизаций валидации и боязни получить разрыв (а ведь до этого не было ни единого разрыва!), то все велосипеды уже придуманы до нас.
Roman
в таком случае WSS + Sessions Service
Yaroslav 🇺🇦
можно даже и без вебсокетов, преждевременная оптимизация это глобальная проблема наряду с инвалидацией кеша и неправильными названиями переменных
Roman
лучше через один WSS канал и API и notifications пушать и аутентифицироваться лишь раз, чем API по HTTPS а notifications по WSS и в каждом HTTPS запросе по разу аутентифицировать
Yaroslav 🇺🇦
Тоесть я правильно понимаю, что ты и апи хочешь гонять по сокетам?