Лекция

JAVA Swift and Secure: Racing Towards Resilient Cybersecurity in Java Applications

Калоян Георгиев (Principal Engineer @ Paysafe)

Лекция за баланса между бързина и сигурност при Java приложения — основи на сигурността в Java, високопроизводителни приложения и разбор на инцидента с Equifax от 2017 г. С демо се показва генериране и проверка на JWT токени, както и рисковете при публични end point-и без защита (SQL инжекции, претоварване на базата) и нуждата от rate limit филтри.

Кадърът е от сървъра на YouTube. Самият плейър — и всичко, което той зарежда — идва едва след като пуснете видеото.

Описание

Лекция от конференцията 🟦 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-а, фреймърка, на който

↗го рънваме и така нататък, всъщност това

↗ще остане и реално ще може да го

↗виждаме.

↗Еми мисля, че отговорих на всичките.

← Всички лекции