JAVA Swift and Secure: Racing Towards Resilient Cybersecurity in Java Applications
Калоян Георгиев (Principal Engineer @ Paysafe)
Лекция за баланса между бързина и сигурност при Java приложения — основи на сигурността в Java, високопроизводителни приложения и разбор на инцидента с Equifax от 2017 г. С демо се показва генериране и проверка на JWT токени, както и рисковете при публични end point-и без защита (SQL инжекции, претоварване на базата) и нуждата от rate limit филтри.
Описание
Лекция от конференцията 🟦 DEV.BG Community Day 2025 https://www.events.dev.bg/allinone/2025
👉 Потребителската ни група: Java
👉 Лектор: Калоян Георгиев, Principal Engineer @ Paysafe
👉 Тема: JAVA Swift and Secure: Racing Towards Resilient Cybersecurity in Java Applications
👉 Презентация: https://drive.google.com/file/d/18FO1ui3MdPjNaL2dhg_9uoa894AJ0Mu5/view?usp=sharing
----
DEV.BG Community Day е еднодневно събитие на живо, целящо да събере на едно място общностите на всички 17 потребителски групи, които поддържаме.
Искаш да разбереш повече за потребителските ни групи? 👉 https://dev.bg/groups/
Искаш да се абонираш за потребителската група "Java" и да знаеш за всичко актуално👉 https://dev.bg/groups/java/
Описанието е на DEV.BG.
Препис
Автоматичен препис — може да съдържа грешки — сверявайте с видеото, преди да цитирате.
Клик върху времето пуска видеото от този момент.
↗Здравейте на всички. А, казвам се Калиян
↗Георгиев. Принцип инженер съм в Bay
↗Saave. А интересен факт за мен е, че
Покажи целия препис — още 811 абзаца (~4734 думи)
↗карам 13-та година като софтуерен
↗инженер в компанията.
↗А и другият интересен факт е, че имам
↗близнаци, момче и момиче, но а
↗стига толкова за мен. А последно само да
↗ви кажа, на снимката съм върху един Opel
↗Корса.
↗който нито е бърз, нито е секюър. Но а
↗затова днес ще ви представя
↗как може да направим бърз и secкр
↗продукт,
↗като а
↗съм ви подготвил в а
↗всичките слайдове подред, а както може
↗да видите в съдържанието, въведение аа
↗основи на сигурността в Javaта.
↗А, ще ви разкажа за високопроизводителни
↗и бързи Java приложения. Подготвил съм и
↗кратко или не толкова кратко демо
↗а за това а как според мен е най-добре
↗да бъде реализирано а такова приложение
↗и а след това ще поговорим малко за
↗демото. Ще ви разкажа аа в детайли
↗всъщност а
↗изобщо цялата структура, как може да
↗бъде подобрено, разбира се, защото а без
↗да се оправдавам, но нямах много време
↗да направя страхотното демо, което исках
↗и разбира се аа заключение е от всичко
↗това като аа
↗мисля, че видяхте на първия слайд QR
↗кода, който може да сканирате. за Q&A аа
↗сесията.
↗Ам във въведението
↗това е може би един несполучлив опит да
↗ви илюстрирам бърза кола без спирачки и
↗нали колко е всъщност Swift и не secюър.
↗А та в общи линии
↗това, което искам да да направя като
↗въведение към вас по темата е, че
↗винаги е най-добре да имаме баланс,
↗нещата да са хем достатъчно бързи, хем
↗достатъчно secкюър за а
↗изобщо за това, което искаме да
↗постигнем като краен резултат. А
↗сега бях си подготвил една смешка да
↗попитам публиката кое е по-важно да сме
↗по-бързи или сигурни, но едва ли ще е
↗толкова спочлива. По-скоро ще ви
↗разкажа, че а предполагам повечето от
↗вас знаят в продуктовия свят всички прод
↗хора искат
↗да имат от всичко по много. А аз лично
↗си спомням за моя рецензент на
↗дипломната работа. Просто реших да взема
↗две бутилки. Едното американско, а
↗другото руско и да му ги занеса, като да
↗го попитам кое от двете иска, а той ми
↗отговори, че иска и френско. Така че
↗нали в в общи линии е същото и с а аа
↗приложенията в
↗IT света и в продадукт апликейшъните.
↗Аа като
↗реално освен бързо, освен сигурно искаме
↗UA и UX да са на ниво. А, но това има
↗своята цена, разбира се, като надявам се
↗в делото да успея да ви покажа всъщност
↗как може да не се лишим от всичките тези
↗неща и да имаме един много добър
↗продукт. Другото нещо, което исках да ви
↗спомена във въведението и то отново
↗засяга много secкюрити темата, е
↗инцидента 2017 година с Еко ифакс. А
↗предполагам хора от вас са се
↗интересували и знаят много добре за
↗него. А там
↗изтехо около 150 милиона PI данни на
↗американци. Като най-големият проблем
↗всъщност
↗беше, че аа около 200 000, ако не се
↗лъжа, а бяха данните за PCI или по-скоро
↗кредитни карти, а за хората, които не са
↗в пеймт индустрията.
↗А,
↗беше от една доста малка уязвимост, бих
↗казал, която просто те повече от четири
↗месеца
↗не бяха пачнали. И това, което нали
↗исках да ви разкажа по тази тема, е
↗по-скоро
↗дори и малката а уязвимост може да
↗събори целия продукт, както е в случая,
↗нали, има освен финансови загуби, аа има
↗и репутационни загуби за компанията. Та
↗secюрити-то е много важно да се случва
↗навреме
↗и да не бъде подценявано.
↗А тъй като
↗нали това другото нещо, което исках да
↗ви спомена е за Life Walk доста
↗по-далечна година като а Security
↗Bridge, но тогава тяхното CEO а Тот
↗Дейвис решава
↗да покаже, че въпреки пробива в тяхната
↗система и откраднатите данни SSN и така
↗нататък, всъщност Всъщност това не е
↗абсолютно никакъв проблем. Като той на
↗доста билборди и а автобуси беше а
↗сложил своя SSN аа и трите си имена.
↗Като в крайна сметка
↗той беше сигурен, че няма какво да
↗стане, щом хората знаят неговия сен и
↗трите му имена. И нали той е CO на една
↗от най-големите компании за PI данни в
↗Щатите, но всъщност се оказа, че има а
↗повече от 13 потвърдени кредита и над 80
↗опита аа това да се случи. Така че
↗никога не подценявайте
↗а способността на другите и
↗secкюрити-то.
↗Сега в този слайд освен, че исках да се
↗похваля, че наскоро бях в Хърватия и
↗затова сложих замък, а всъщност
↗то е основата на илюстрацията на
↗secкюрити, така както аз я виждам. И
↗реално външният роф е
↗фаallла, а стената е аутентикацията.
↗Стражата, който дебне отгоре е всъщност
↗auorization и rй лимитите. А и вече е
↗трудната зала
↗със знамето. А всъщност това са
↗криптираните данни.
↗Като а
↗това, което съм си подготвил като булет
↗пойнти е всъщност какви са добрите
↗практики в Java.
↗и съм дал, извадил съм просто малък
↗пример за това как може всъщност да
↗използваме ранъм, който е бърз, но пък
↗за сметка на това не е secure и е
↗предвидим. А и всъщност good practice е
↗да използваме secure random, който е
↗малко по-бавен, но достатъчно бърз за а
↗90% от нуждите, които бихме имали да го
↗използваме
↗и
↗според мен е добра комбинация между а
↗Swift and Secure. Аа, забравих да
↗спомена, преди изобщо да измисля
↗заглавието на презентацията, аа доста
↗хора ме питаха за за Swift ли ще говоря.
↗Не, аа няма да говоря за Swift като аа
↗програмен код, а ще говоря само за Java.
↗Swift в моите представи е аа бързина.
↗Та
↗връщайки се на темата по булет пойнтите,
↗освен secure randъм, съм си подготвил
↗най-добрите практики за това как да а
↗използваме парола в нашите приложения,
↗като а доста често сигурен съм много от
↗вас са срещали а стринг за взимането на
↗парола изобщо в обекта, но също Всъщност
↗стринг е много опасен да бъде използван,
↗тъй като реално а единственият начин, по
↗който можеш да изчистиш паролата, когато
↗е запаметена в стринг от JVM-а
↗е а с чрез garbage колектора.
↗Сега много от вас най най-вероятно ще
↗кажатма ти можеш да извикаш garbage
↗колектора с system.
↗GC и той да дойде и да зачисти всъщност
↗това, което е имало в стринга Passwърд.
↗А аз по-скоро а бих обяснил така за
↗хората, които не знаят, а system.g GC
↗работи като по начина, по който да си
↗извикаш сервитьор, нали? Вдигнал си
↗ръка, а сервитьорът те е видял, но ще
↗дойде, когато се освободи или когато се
↗сети. А по същия начин е и с System GC.
↗Така че за да можем бързо и лесно да се
↗освободим и да изчистим паметта, а
↗по-скоро е много по-добре да използваме
↗масив очарове за парола.
↗Като извадил съм и keyсто Java X
↗криптографията.
↗Това са добри практики, които всъщност
↗без да използваме външни библиотеки а
↗могат да ни помогнат директно вградени в
↗Java а
↗без това да използваме, както вече
↗споменах, външна библиотека, защото
↗рисковете за използване на външна
↗библиотека са много големи.
↗А, спомням си за един от секюрити
↗бриджовете, които с моя колега Марто сме
↗дискутирали. Беше една библиотечка за
↗цветове в Anguюър. А
↗бял хакер беше просто решил да дъмпи
↗кредит карти чрез тази библиотечка.
↗Мисля, че над 400 проекта го бяха
↗интегрирали, защото са решили да
↗използват нещо на готово.
↗Та тук по-скоро препратката ми е
↗използвайте а възможно най-близко до
↗програмния език неща без външни
↗библиотеки, без транзитивнита
↗и така нататък. И в третата точка съм си
↗извадил а всъщност всички Java Security
↗Frameworks които
↗а аз през годините съм се сблъсквал с
↗тях. Направили са ми добро впечатление,
↗а по-скоро са nтив и а реално могат да
↗бъдат използвани
↗в Java света за JVM, за контейнери.
↗А като на първо място съм извадил
↗всъщност Security Substма на Jossa,
↗който от JBoss
↗7 се промени, тоест след JBoss 7 от
↗JBoss 8, а всъщност вече името му е El
↗елитрон.
↗А интересен факт за него е, че
↗той е secюритийър
↗на Jos и може да бъде конфигуриран и
↗използван в
↗голяма степен а като
↗keyстоore, като auentкеationшъм базата,
↗нали. Страхотно много възможности има.
↗А, но за следващата точка Spring
↗Security бях си подготвил отново една
↗шега, която може да видите, а, че
↗всъщност това е любимата библиотека на
↗всички хора, занимаващи се сприн
↗и secюрити, но
↗най-големият проблем е, когато трябва да
↗я конфигурираш. А исках да кажа, че тази
↗шега се отнася както за Spring Security,
↗така и за Electron, така и за Jaка
↗Security, а за Java Enterprise
↗подходите.
↗Много е важно да се отделя време на
↗всеки един такъв secюритифреймърк, да
↗бъде естестван, да бъде аа със сигурност
↗конфигуриран по начина, по който искаме
↗да го използваме в нашия апликейшъ.
↗и в същото време а това нещо да ни
↗помогне за по-добро secюрити в фрейм в
↗приложението, което използваме чрез Java
↗фреймърка.
↗А
↗в следващия слайд това, което съм си
↗подготвил, всъщност е
↗а нещо, което а надявам се Дидо Цветанов
↗е дошъл да да ме уважи днес и да гледа.
↗А нещо, което разбрах от него. А
↗всъщност чувал съм да го наричат
↗функционално програмиране в Java, а нали
↗по много различни начини, но става
↗въпрос завъo
↗и web Spring Flux апликейшъните
↗аа където всъщност а ние получаваме
↗както secкюрити, така и бързина
↗и аа в същото време асинхронност на
↗заявките.
↗Аа неслучайно в картинката, която
↗чатботъ ми генерира, затова може да
↗видите блокинг и nonн блокинг
↗рекуестите.
↗А като а
↗за блокинг рекуестите, предполагам
↗всички от вас знаят, че реално на един
↗тред имаме а една заявка и
↗в някакви случаи, не даже не в някакви,
↗в доста случаи това е страхотно, но е
↗много важно да знаем, че то работи
↗всъщност като да чакаш на гишето в
↗пощата, нали? Ако човек пред теб попълва
↗бавно формуляра, твоят ред ще дойде
↗доста по късно и обратното, нали, ако е
↗по-бърз, а ще можеш
↗да стигнеш по-бързо до гисето.
↗А докато чрез mono и а fкре reactти
↗програминга
↗а всъщност имаме nonнблокинг
↗заявки които
↗буквално
↗ще видите в демото, че могат да летят
↗в моите очи, дори и на моята машина,
↗която не е чак толкова мощна.
↗Моля, простете, само ще пийна малко вода
↗в последната точка
↗аа Java Performance съм си подготвил три
↗булет пойнта,
↗които а аз само съм тествал, но а те
↗имат някои пререкзити като а специално
↗за Virtuual Thread а трябва ви Java 21 и
↗нагоре, а всъщност те заменят пула и
↗това, което е много позитивно за тях е,
↗че всъщност намаляват lancн tool.
↗А като
↗реално virual трейдовете,
↗въпреки че се използва термина Virtuual,
↗те не са виртуални като криптовалутите,
↗нали? И аз съм фен на криптовалутите, да
↗не ме разбирайте погрешно. А но
↗доста често те работят по а много
↗съвършен начин.
↗А що се отнася до Гуви VM, а
↗признавам си, много исках да подготвя
↗демото с Грау VM, обаче а отново ще се
↗оправдая, че нямах това време, което а
↗исках да имам, така да го кажем. Но аа
↗за GraVM това, което съм си подготвил и
↗много искам да споделя с вас, е, че аа
↗мно много често съм в програмните среди
↗съм чувал колеги да казват ми тя Java е
↗бавна, то JVM-ката докато я запалиш и
↗така нататък и така нататък. Ами
↗всъщност с GRVM нещата наистина наистина
↗хвърчат. А та за следващата лекция към
↗def.bg обещавам ще си подготвя демото с
↗Grvm и ще го тестваме с в паралел със
↗сприн и secюрити
↗а частта.
↗Като последното нещо, което искам да ви
↗кажа е че
↗реално
↗всичко това, което споменахме и става
↗въпрос за Open телеметри, нали, а
↗много е хубаво да имаш secкюрити, много
↗е хубаво да работи бързо твоя твоето
↗приложение, но без подходящи телеметри и
↗логинг всъщност
↗ти си сляп И
↗дори и да се опитат да те пробият, няма
↗ня няма начин да разбереш, че това ще се
↗случва.
↗А сега ще ви покажа как работи един бърз
↗аликейшъ
↗а под натоварване
↗като
↗само една секунда
↗да подготвя
↗екрана.
↗Да, надявам се вече виждате.
↗Аа, подготвил съм си едно проектче,
↗което след края на презентацията ще може
↗всеки един от вас да си го свали. Ще го
↗кача в GitHub, ще има линк в самата
↗презентация за него.
↗Сега набързо ще ви преведа и ще ви
↗разкажа всъщност какво съм направил.
↗Както виждате, не е а нещо голямо
↗мащабно. А четири-пет клас един
↗JavaScript, който използвам за тестове и
↗а всичко това се случва с Mavon и
↗един POM XML, в който съм конфигурирал
↗Dependнanc. А използвам Bucket for J за
↗Cash. А нещо, което съм си подготвил в
↗следващия слайд след демото, да ви
↗разкажа а защо всъщност какви са
↗рисковете да използваме кеш, колко бързо
↗е и така нататък.
↗А това, което виждате като клас е rate
↗limitтър, който всъщност имплементира
↗уеб филтъра на спринфрейка.
↗А, подготвил съм си реално
↗max request per seconds конфигурация,
↗която ако имах време естествено можех да
↗я сложа в някакъв propъртиy tool,
↗но а дори и с хардкода на мисля, че ще
↗за за целите на демото а ще е добре. А
↗като може да видите, а подготвил съм си
↗един филтър аа чрез уеб филтърчейна аа
↗на на база на който а предскочим ли този
↗а
↗тази константа, която споменах за Max
↗request per seconds. Всъщност, а нашият
↗сървър започва да връща Tomi Request 429
↗като грешка. Подготвил съм си един бърз
↗JWTл,
↗а в който нещо, което не бих посъветвал
↗никой, нали, за целите на нашето демо
↗просто съм го направил. А expiration
↗time на JWT-то ми е един час, както
↗виждате. А Secret Kia отново е
↗изхардкоден в Javaта. Това със сигурност
↗е нещо, което а би трябвало да бъде
↗заменено с
↗Property във Volt или някакъв друг Key
↗Secret Store, а откъдето да го
↗извличаме. А пропуснах само да кажа защо
↗expреation time за мен е аа
↗пробив в системата. Реално, когато имаме
↗толкова голям епиationшъ, всъщност ние
↗оставяме много дълго отворена нашата
↗система за хора, които може в кавички да
↗не са аутентикирани,
↗нали, и да се сдобият с JWT-то
↗на даден usзър.
↗Та в общи линии трябва да
↗много да внимаваме с тайм мениджмънта на
↗акюрити
↗токъните, които издаваме и да са за
↗точно определено време, за което ни
↗трябва.
↗Аа и последното нещо, което исках да ви
↗покажа е трите пойнта, които съм си
↗подготвил. Единият е за а генерирането
↗на токъна. А другият е, който реално
↗проверяваме secure датата и дали
↗всъщност потребителят има
↗валиден JWT токън, защото ще видите, ще
↗се опитаме да го счупим с такъв
↗невалиден
↗и а един публичен, който а всъщност
↗тук
↗това е един от проблемите, за който
↗споменах, когато ви показвах замъците аа
↗от Хърватия. А, но реално secкюрити-то
↗винаги е слоеве и уязвимостта в нашия
↗апликейшън много често може да е точно
↗такъв публичен end point, а тъй като той
↗няма проверка, аа ако потребителят успее
↗да пробие фалаа, реално и в този случай,
↗нали, нямаме четене от базата, но може
↗може да се стигне до SQL инжекшъни, до
↗пренатоварване на базата, сриване на
↗сървъра и така нататък. От тази гледна
↗точка, това, което исках да ви спомена,
↗много е важно публичните енпонти винаги
↗да бъдат много добре дефинирани и да
↗имат своя рейлимит филтър, а който а
↗както ви казах, всъщност ние сме го
↗ограничили в момента на максимум 10
↗рекуеста в секунда,
↗Като
↗да преминем вече и към трошенето на
↗апликейшъни. Ако има QA в залата,
↗сигурен съм, че много ще се накефят.
↗Ам преди доста години бях Q. Обожавах да
↗троша неща. Явно и моите деца и те са
↗QA, защото продължават да обожават да
↗трошат някакви работи.
↗А
↗това, което съм си подготвил, е на K6
↗един W scриpt, а който в себе си, както
↗виждате, отново нещо много кратко, което
↗със сигурност може да бъде екстенднато.
↗А реално има virual usзъри в секунда,
↗които ще натоварим системата. А
↗реално дюрейшъна на атаката, но всичките
↗тези неща аз съм ги направил да може да
↗бъдат управлявани от конзолата.
↗И единственото нещо, което трябва да
↗направим, е да си генерираме един нов
↗токън.
↗Аа
↗да, ей това е публичния ни endpint,
↗както виждате. Това е публичен end point
↗permission without token. А
↗генерираме токънчето
↗можем да го сложим в JWTio.
↗А да видим всъщност е expiration,
↗userма. Както виждате, а много а
↗семплайън структура, нещо за което
↗декември месец в отново в Java user
↗групата говорих специално за JWT токъни
↗и за Pass Keys. Аа много е важно в а
↗JWT-то да не държим сензитив дета и
↗отново да се опитаме да я минимиризираме
↗до за само за а целите, за които ни
↗трябва.
↗Аа нашият токън а както виждате експарва
↗в 2:30 след един час.
↗Аа секунда.
↗Така. Слагаме го.
↗Така.
↗Тук съм си подготвил 1200.
↗Мислите ли дали ще издържи
↗системата? Така. Това, което направих в
↗момента, а ръннах нашия скрипт с 12
↗рекуеста в секунда, 12 виртуални юзъра.
↗А за 10 секунди е атаката,
↗а или по-скоро, за да видим дали нашият
↗апликейшън ще се държи както трябва. Ам
↗това, което може да видите,
↗абстрахирайте се откл че 75%. Това е
↗чисто заради скрипта. Както виждате, тук
↗са четири чека и на базата на това а
↗всъщност ги дава, че те са фейлнали.
↗Само 25% са минали. Тоест ние успяхме да
↗направим 120 рекуеста като аа за 10
↗секунди като макс request per second,
↗както видяхте в моята конфигурация е 10.
↗И а всъщност аз пуснах скрипта да върви
↗с 12 рекуеста в секунда, което а може да
↗видите тук, че се получава 83%,
↗тоест 100 от рекуестите са успяли да аа
↗получат статус 200, а другите са се а
↗точно на на нашия рейд лимит и са 16% 20
↗рекуеста всъщност не са успели да минат.
↗Сега ам
↗както виждате,
↗аз си бях подготвил
↗поне от моята гледна точка
↗малък рейлимит.
↗А как мислите дали със 100
↗ма request per seconds ще се прави моята
↗скромна машина?
↗Сега ще го видим.
↗Реално в момента процессваме.
↗Аа
↗секунда, че не съм го вдигнал.
↗Реално в момента процессваме 100
↗виртуално юзъра в секунда
↗с това апликейшънче, за което ви
↗споменах, че в следващите два слайда ще
↗обясня в детайли изцяло а как се случват
↗нещата в апликейшъна.
↗А може да видите, успяхме да направим
↗1000 рекуеста за 10 секунди. А,
↗абсолютно всичките са ни върнали 200.
↗Окей, тоест нашият сървър успява да
↗процесне 100 куеста в секунда.
↗Какво мислите дали ще успеем да
↗процеснем 1000?
↗Въпреки че, както ви казах, съм със
↗скромна единица.
↗Забравих да спомена, че ако искате да
↗направите такъв тест с апликейшъна,
↗който имам, просто трябва да си
↗инсталирате графа на K6. А както
↗видяхте, успяхме да процеснем 1000
↗виртуални юзъра в секунда и дори и да се
↗опитаме да атакуваме нашия сървър с 1500
↗виртуални в секунда,
↗той няма да започне да ни връща а
↗internal server error 500, а той ще
↗успее да процесне както може да видите
↗абсолютно даже повече от 10 000 в случая
↗рекуеста, които да му върнат 200
↗и малко по-малко от 5000, които всъщност
↗са блокирали тази атака. Така. А аз
↗мисля, че няколко пъти се оправдах, че
↗нямах време, но както виждате,
↗най-големият минус в момента в моето
↗демо е, че аз всъщност, ако гледам само
↗сървър сайт, аз съм сляп. Аз в момента
↗не знам какво се случва. Не знам, че
↗някой ме бомби, не знам, че а се е
↗случило изобщо, че поемам трафик 1000
↗виртуални юзъра в секунда.
↗Та това ми беше пойнът и за Open Telem.
↗Много е важно винаги да имате добър
↗логинг, добро secюрити
↗и ако може апликейшъ да е бърз.
↗А това беше с моето демоo.
↗Само секунда.
↗Така.
↗Да, вече ви споменах всъщност а
↗бързината без сигурност е катастрофа.
↗нещо, което а всъщност е мейн поintта в
↗моята презентация и
↗реално UX-ъ също може да пострада от
↗това, че сме решили да направим нашето
↗приложение бързо.
↗А що се отнася до демото, това, което
↗съм си подготвил е всъщност, нали на
↗първо място бързината не означава, че
↗няма да имаме сигурност в нашия
↗апликейшън. А другото нещо, което нали
↗за за мен е супер важно, е винаги да
↗имаме security filter chain, както в
↗случая на нашия апликейшъ. А всъщност,
↗когато решим, го пускаме този филтър,
↗когато решим го спираме за тестови цели
↗и за тестови енвармънти може това нещо
↗да бъде спряно. А всъщност това, което
↗видяхме в демото, е и че ние успяхме да
↗направим reactти autuentication, а която
↗както видяхте всъщност може да процесне
↗над 1000 юзъра, които се аутентикират
↗или удрят наш а наш end pointт, който аа
↗изисква JWT или аутентикация
↗и Аа най-важното нещо всъщност е, че
↗нямахме никакви проблеми с а inputт
↗output стрийма и че валидирането на
↗токъна се случва супер бързо а с кеш,
↗който е в меemoryто аа кеш, който както
↗виждате съм оставил буlletт point в
↗случая, че всъщност това, че кешираме
↗нещо, не означава, че е несигурно.
↗Напротив.
↗А Bucket For, който в случая използвахме
↗за това демо, всъщност а ни убеждава в
↗обратното, а можем да използваме кеша,
↗да е бърз, да е in memory и да работи.
↗Да, съгласен съм, че в случая
↗съм го пуснал на едно ядро, а реално на
↗един нот работи. Ако искаме да имаме
↗подобен аликейшън на повече от един
↗Note, всъщност трябва да използваме
↗споделен кеш, но отново Bucket For Jт
↗такова решение,
↗така че може в някои от последващите
↗а ме а лекции да ви а запозная с това,
↗но аа последното нещо, което аа не ви
↗демонстрирах, е, че всъщност Аа много е
↗важен,
↗а много е важно да имаме
↗тестинг, какъвто ви демонстрирах, защото
↗реално това ни
↗кара да се чувстваме сигурни, да не се
↗паникьосваме, да знаем, че нашият
↗апликейшън може да издържи на това
↗напрежение и можем да го изтестваме
↗много преди а prodъкшън фазата.
↗Това, което съм си подготвил отново за а
↗демото, което ви показах, една малка
↗табличка всъщност какво успяхме да
↗постигнем като скорост, сигурност и
↗решение. В случая не блокираме потока,
↗не правим скъпи inputт, outp
↗и това го постигаме с монообте и JWT без
↗база.
↗За да имаме повече скорост в
↗приложението, не е задължително да
↗използваме сесия. Знам, че много често а
↗prodctт хората искат да имаме сесия, за
↗да могат да проследят потребителското
↗поведение,
↗но тя може да бъде добавена в фронт или
↗на друго място, но не и в autнentication
↗апотите, които използваме. И по този
↗начин, както виждате, отново печелим
↗скорост, сигурност, че нямамери
↗лик чрез стейтовете и всъщност ние имаме
↗state токъни. А
↗третото нещо, което съм си извадил е, че
↗успяхме на голямо натоварване нашия
↗апликейшън.
↗Не съм го тествал, признавам си, на 100
↗000 рекуеста, но предполагам, че около
↗10 000 дори и на моята скромна машина ще
↗успее да издържи. А всъщност сигурността
↗в това нещо е, че като имаме и рейлимит,
↗реално по IP лимитираме
↗бот атаките
↗и а когато имаш скорост, дори и да
↗добавим а външна библиотека,
↗реално тя няма много да забави аспонс
↗тайма и по този начин а всъщност ще
↗спечелим аа да имаме хубав мониторинг на
↗апликейшъна и а да не пропуснем някакво
↗скрито поведение в бекнда.
↗Ам
↗последният слайд, който съм си подготвил
↗е всъщност нещо, което мисля, че трябва
↗да извадим като заключение от а тази
↗лекция. Всъщност сигурността трябва да е
↗by defлт.
↗А да не е нещо, което
↗го правим като фичър, да не е нещо,
↗което в последствие мислим за него. А от
↗моята гледна точка и предполагам на
↗доста от вас, а всъщност ние трябва да
↗започнем
↗с секюрити-то в самото начало, самото
↗начало на продукта, да го изговорим с UI
↗и UX хората, да им разкажем всъщност
↗какво трябва да направим, за да имаме
↗бърз акюрити,
↗да митва абсолютно всички аа
↗очаквания за дадени от стейкхолдъри като
↗регулации и така нататък, да има а 2
↗autentication, биометрия и така нататък.
↗и абсолютно винаги това нещо да бъде
↗перформамс тествано, за да се знае
↗всъщност какъв е лимитът на на нашия
↗контейнер, на а приложението, което
↗използваме, вдигаме, за да може винаги
↗да си оставим някакъв буфер, ако сме
↗успели, да речем, както е в нашия
↗случай, да правим над 1500 рекуеста в
↗секунда. Хубаво би било да го лимитираме
↗не на 1500, за да сме на ръба, а поне с
↗200 рекуеста по-надолу.
↗А тъй като наскоро бях на една
↗конференция
↗Cyber Securюти конф в България, там бяха
↗събрани доста
↗полицейски комисари, хора от службите,
↗занимаващи се с
↗акюрити
↗в IT света, но от държавните институции.
↗Там две неща. Това са и последните ми
↗два булет пойнта. Две неща ми направиха
↗впечатление. Повечето от тях говореха
↗за уязвимости аа през смартфона
↗и всеки един от нас има. Ясно е, че това
↗всъщност е новият autentтикейшън
↗механизъм. Ние го използваме за
↗абсолютно всичко, но трябва да знаем, че
↗всъщност
↗в момента там е там сме най-уязвими.
↗И
↗просто съвет от мен абсолютно всички
↗мерки, които могат да бъдат взети за
↗секюрити на вашия телефон, аа да го
↗направите биометрика, face recognition и
↗така нататък, тъй като нали нагледах се
↗точно на тая конференция, която споменах
↗на много случаи, в които
↗а всъщност хората
↗биват пробити през телефона, а и през
↗това, че нали не са го защитили.
↗Другото нещо, което
↗много ми направи впечатление на на тая
↗конференция, е, че се говореше само и
↗единствено за пароли. Не само и
↗единствено, но а голяма 90% от случаите
↗бяха пароли или пинове.
↗А нещо, което аз разбрах преди около две
↗години, нещо, което реализирахме в
↗Paysfe в нашата фирма, а това са така
↗наречените Passки Keys.
↗Ам, не знам колко от вас са запознати с
↗тях, но наистина а за мен, особено след
↗тази конференция,
↗това е
↗люшъ, към който трябва да се върви от
↗гледна точка на това, че всъщност а те
↗са непробиваеми
↗по начина, по който е направено и
↗разбира се много е важно и как ще бъде
↗използвано в даденото приложение,
↗но реално
↗не могат да бъдат отгатнати, както
↗паролата не могат да бъдат разбити, а и
↗те те в повечето случаи се държат на а
↗найр мястото на девайса, от който сте си
↗го създали. Дали е телефон, дали е
↗таблет, дали е лаптоп. Та това за точно
↗за Паски говорех през декември.
↗Разказах всъщност как ние сме го
↗имплементирали, как сме го тествали. А,
↗направихме абсолютно всичко необходимо
↗за това нещо, като
↗securюity тестинг,
↗тестинг и така нататък и continuous
↗integraation тестинг, който върви и към
↗момента най-вероятно, ако отворя слака,
↗ще мога да ви покажа последните
↗резултати на апсентикеation
↗тестинга.
↗Та това е нещо, което според мен е
↗бъдещето да вървим към акюрити без
↗пароли, без те да могат да бъдат разбити
↗от хакери
↗и дали ще са пакис, дали ще са нещо
↗друго. Мисля, че това е насоката.
↗И
↗последното нещо, което искам да ви кажа,
↗е, че всъщност относно презентацията,
↗разбира се, аа
↗ако искаме да сме бързи, трябва да сме
↗спокойни, трябва да сме помислили
↗абсолютно всички сценарии
↗и за да сме спокойни, трябва пък да сме
↗сигурни.
↗Имаме ли въпроси?
↗>> Имаме няколко. Да. А така. Така че може
↗да започнем с тях. Който още не си е
↗задал въпросите, може да сканира Vivox-а
↗и да пита Калоян. Ето тука почваме с
↗този.
↗А първият въпрос е защо Reactive
↗Programing вместо Virtual Threads, вече
↗не е ли риск да използваме външна
↗библиотека, както е Reactтив? А
↗в случая тя е интегрирана, но мисля, че
↗го споменах на аа
↗малко по-рано в презентацията. Споменах
↗и за Virtuual Threads. Та за следващата
↗презентация ще бъде подготвен с Virtual
↗Threads и с Grow VM и да влезем в
↗детайли, може да ги сравним и с Reactти
↗програминга.
↗По-добре ли е да ползваме Verк а вместо
↗Webfкс откъм гледна точка на
↗performance? А не съм запознат с Verк,
↗признавам си. А, бих го погледнал,
↗разбира се, да го сравня с уебкса и със
↗сигурност
↗нещо, което провокира интереса в мен.
↗Благодаря за въпроса. Какво трябва да се
↗съдържа във всяко сигурно Java
↗приложение?
↗Ами
↗със сигурност
↗на първо място йлими, нещо, което а
↗пропуснах да ви кажа. Всъщност рейлимит
↗може да бъде направен а и на firewall и
↗на по-ниско ниво, но за мен source of
↗truth винаги трябва да е в Java
↗апликейшъна, защото по този начин дори
↗да сменим а JVM-а, фреймърка, на който
↗го рънваме и така нататък, всъщност това
↗ще остане и реално ще може да го
↗виждаме.
↗Еми мисля, че отговорих на всичките.



