dev.bg WordPress ot keep yourself positive

Добре де, нещата малко ескалираха при подготовката за DEV.BG – от bulletpoint lecture (която лесно може да отиде към death by powerpoint) взех, че направих intentionally vulnerable WordPress plugin и тема, които са с повечето известни уязвимости (като гравитацията е около OWASP® Foundation). Всичко това много добре документирано (умря циганката …) и с абсолютно всички примери, които дадох и на почти двучасовия workshop.

Част от темите, които засегнах бяха класическите (и най-разпространени):

* Cross-Site Request Forgery

* Insecure Direct Object Reference

* Remote Code Execution

* Supply Chain Attack

* SQL Injection

* и още няколко дребни

Всичко това в docker compose (с команди как да си вдигнем всичко и как да го затрием), който тръгва точно по начина по който вървеше при мен на демото. И понеже моята същност се връща отново и отново в първата ми голяма сцена на QA: Challenge Accepted когато говорих за performance testing не се сдържах и добавих опция да напълним празния WordPress с доста данни (които са близко до реалните такива по това, което виждам поне в www.nedko.info ) и да направим benchmark с тези данни, след оптимизация (каква – в документацята) като има дори и PoC за с и без Redis caching.

Вътрешното ми чувство обаче ме спря ден преди събитието и реших, че понеже този webinar така и така ще отнеме половин работен ден по-добре да дам всичко от себе си. И ето, че вече имаме и скенер за уязвимости (wp-scan), дори и демо за bruteforce с enumeration & dictionary атака, nginx и PHP препоръки за фиксове на OS ниво и сигурно още неща, които забравям.

Мисля, че това е най-пълния списък, който съм намирал в интернет по темата хем за сигурност, хем за WordPress особено като се има предвид и демо плъгина и темата. Всичко това под MIT лиценз.

Линк към репото:

https://github.com/NedkoHristov/WordPress-Security-or-keep-yourself-positive-dev-bg-webinar

Благодарности на Nemetschek Bulgaria, които за пореден път ми се връзват на налудничевите идеи (скоро идва анонса на нещо много голямо) и на DEV.BG с които организацията както обикновено, е страхотна.

Излишно е да казвам, че всичко това е само за обучителни цели.

Ако някой има интерес към материята и иска нещо, което не е вътре – пишете, интересно ми е и ще надграждам.

// копие на поста ми от linkedin

26042026

Напоследък не пиша много, но и програмата ми е просто невъзможна.
Тази седмица бях в София за почти цялата седмица, а в Понеделник правих първия си webinar, който по стара моя традиция направих по-дълъг, но не с 2-3 минути както по конференциите, а с почти час – стана общо 1:50 часа в който си говорихме (е, аз говорих само, беше малко странно без feedback), се получи добре. Този път си начесох крастата НАЙ-НАКРАЯ и цялото нещо беше 80% демо – команда по команда

Линк към кода за webinar-a.

Смятам, че ще е полезно на хора от бранша за да видят колко е лесно да счупим нещо и колко е важно да разбираме как работят отдолу нещата.

Тук са всички attack vectors които дискутирахме. За всяка една от тях имаше три задължителни точки:

  • Attack surface
  • Expected result
  • Evidence

Освен webinar-а бяхме по срещи от сутрин до вечер и петък вече бях с единия крак в гроба.

Но пък ми се случи нещо интересно – на връщане в самолета до мен човек тъкмо приключи общатта книга на Лий Чайлд и брат му – Андрю Чайлд – “Изходна стратегия”. Беше ми любопитно какво мисли, защото четох противоречиви мнения и след кратко мнение по темата ми я подаде и каза – “Твой ред е да я прочетеш”. Напомням, че ние мъжете получаваме по 1-2 подаръка през годината – на Нова Година и на рождения ден (евентуално) така, че за мен беше много приятен random act of kindness. Започнах я и изядох първите 30-тина страници в самолета – изглежда обещаваща.

Освен ВСИЧКО ОСТАНАЛО в четвъртък имахме vibe-a-ton в офиса в София – нещо като хакатон, но с фокус върху vibe coding-а. Оказа се, че съм супер назад с AI оркестрирането. Бях в много силен отбор със Стоян и Виктор, които са ми колеги от ДевОпс отдела, но към края не ни стигна времето и не можахме да produce-нем нещото (заради, оказа се после, една nginx директива и това, че бяхме вдигнали Ollama, но в нея не бяхме стартирали Gemma 4). Обаче пък натрупах доста впечатления за vibe coding-а – ще споделям при първа възможност. Само да кажа, че ни счупиха маркетинг отдела в който няма нито един човек, който разбира от програмиране. Не е зле, а? Изводи, изводи.

Понеже последните дни не бях в града съответно не съм и с децата, които адски ми липсват.

И реших да хвърля малко дяволи преди да съм се побъркал. Вчера излязохме с Явката да покараме по черно около Аладжа Манастир и с компания чувството е супер различно. Моя профил е на шосе и в гората още ми е трудно да се ориентирам по маркировка, дупки, клони (и диви прасета, които ни излязоха Октомври месец когато с Тедо карахме подобен маршрут, но по тъмно), но с някой опитен пред мен беше топ. Хвърлих всички дяволи и си казах – това е, мина ми.

Е, не ми мина.

Снощи беше от трудните вечери с малко сън и много събуждане, да не ви кажа и какви неща сънувах … Та на сутринта си взех екипировката, проверих колелоти и хайде към Балчик. Скоро ми предстои шосейно състезание и трябваше да си видя лимитите. Работата не е особено добре – за тази година съм прекарал само 17 часа на колелото и 300 км с под 3км Д+, което е супер малко. Но пък си изпънах дяволите по баирите на Оброчище, след Балчик и обожемой – неочвешкия баир, който всъщност включва два – този на Златни Пясъци и този след него към чешмата на Аладжа Манастир. Имаше моменти в които се чувствах много силен, но след 50-55 км. нещо се обърка и бях на ръба на бонкинг-а последните километри. Уж спазвах формулата за прием на храна и вода, but go figure. Определено карането беше безценно, защото:

  • Изводи около седалката (върнах стара такава) и колчето (което почиствах и съответно преместих с няколко мм по-нагоре);
  • Определено НЕ харесвам Shimano Synchronized Shift – издъни ме на няколко пъти, а прехода между скоростите не винаги е плавен;
  • Трябва да започна да си слагам кърпа под каската, защото днес една пчела ми влезе в каската (не беше забавно докато не я махнах от косата си, добре, че имам много, а пчелата не беше със суисидни наклонности);
  • Трябва да започна да си слагам слънцезащитен крем – само от две карания и направих тракторските ръкави и крачоли;
  • Нямам нужда от всички чанти по колелото когато имам pouch – върши страхотна работа, даже се замислям за второ
  • Накрая, но абсолютно не на последно място е факта, че не се пречупих, макар, че по баира към чешмата на Аладжа Манастис бях труп не се отказах. Това беше важен тест за мен. В края на седмицата ще видим колко няма да се пречупя, че ме чака 95км състезание

19042026

Моя лаптоп май е напът да сдаде багажа. Някакви background процеси го убиват бавно. До сега не съм виждал толкова натоварена машина ми се струва.

~  w                                                                      ✔
 0:55  up 31 mins, 2 users, load averages: 147,36 45,88 22,65
USER       TTY      FROM    LOGIN@  IDLE WHAT
nedko      console  -       0:54       - -
nedko      s000     -       0:55       - w
 ~ 

14042026

What a time to be alive.

Другата седмица имам workshop по любима тема – Security в WordPress и още не ми е останало време да си структурирам нещата. Освен това ще говоря скоро и по тема в орбитата на горната, но на много по-голяма сцена. Освен това с mentee-то бутаме ДевОпс курса по mentor the young – всичко се развива добре, но богу – свършиха ми ръцете (и мозъка) да мултитасквам на всички фронтове.

In other news ходих да карам по пътеките на Аладжа Манастир надявайки се да успея да направя добро време, защото с колегите вече говорим да ходим на Витоша 100 и освен, че изобщо не бях направи ресърча си правилно и екраните на Garmin-а ми бяха абсолютно безполезни спирах сигурно 20 пъти да гледам къде точно ми е track-а. Аматьорски грешки. Накрая за 23-24 км. направих средна скорост от около 10км/ч, което е плачевно. Последните около 5км са асфалт и реших там да натисна малко да си оправя статистиката и … спуках гума. Дори и бозата вътре не можа да закърпи положението и карах на капла и едвам-едвам докато се прибера.

После естествено мих колелото около 40 минути и изцапах половината къща, която предния ден бях почистил хубаво.

В това отношение поне шосейката е доста по-лесна за поддръжка.

И говорейки за шосето имам едно 100км каране скоро, което миналия път като карам у-м-р-я-х, да видим този път как ще е. Предполагам, че пак ще пукна по баирите и ще си съжалявам житейските избори.

Трябва да свържа часовника си с някакъв healthcheck service за да имам healthchecks та ако ритна букета някъде да пише в блога. Това си е бизнес идея!

Връщам In other news секцията, която понякога ми липсва като си гледам старите постове така, че:

In other news:

  1. Макар и малко стара новина – изтече source code-а на Claude. Доста се изписа по него като на мен ми хареса сбития разказ на Fireship по темата. По-горе е темата в дълбочина. Едно от TLDR-тата е, че кода не е нещо космическо и нечувано, а вътре има малко интересни неща като вътрешен assistant Buddy, wtf detector, доста коментари (това за да може да си дописват нещата с AI по-ефективно) и други интересни неща.

08042026

Болен съм. Снощи спах около 2 часа и днес съм дроб. И още със събуждането ми в главата проехтя далечното ехо на моето юношество експериментирайки с всякаква стрнна музика и по-точно единствената на The Exploited, на която знам текста, хъхъ:

Хубавото е, че преди да ме събори каквотомиетам вчера направи може би първата тренировка на тренажора, която ме накара да се почувствам уверен в скорощното състезание, което ме очаква. Много назад съм, но съм уверен, че ще успея да завърша, макар и близо до DNF. През годините установих, че упорството ми на седалката е феноменално (за моите килограми и липса на редовни тренировки).
След тренировката излязох да си взема нещо за готвене от магазина, първо стъпало и си изкривих глезена. :D То да беше едно.

02042026 – щастие

С децата сме и всичко върви много добре – всеки ден е забавление, а треската за динозаври ги е завладяла напълно.

Освен това в Storytel пуснаха последната книга от серията за Бънк Ромеро (и обявена за последна, повече няма да има) – Мрак, която чакам от доста време, а преди малко получих notification, че “Жигосаният” на Робърт Гарлбрайт.

Днес споделих и, че за втори пореден сезон съм ментор в Mentor the young. За това ако на някой му е интересно – да пише някъде из коментарите.

Щастлив съм.

01042026

Дори гиганти като Anthropic не са имунизирани срещу аматьорски грешки в CI/CD процесите си. Вчера (31.03.2026) станахме свидетели на това как целият source code на новия им CLI инструмент – Claude Code – се оказа публично достъпен в npm. Причината? Елементарна – sourcemap файл.

Какво се случи всъщност?
В стремежа си към fast delivery, екипът е публикувал пакета в npm, включвайки .map файлове. За тези, които не са в темата: sourcemap-ът е мостът между компилирания, минифициран код и оригиналния TypeScript/JavaScript. С негова помощ разкодирането на логиката на Anthropic отнема точно три команди.

Резултатът е пълен достъп до архитектурата на инструмента, вътрешните API извиквания и логиката на взаимодействие с модела.

Ето и целия блогпост – https://kuber.studio/blog/AI/Claude-Code’s-Entire-Source-Code-Got-Leaked-via-a-Sourcemap-in-npm,-Let’s-Talk-About-it с много детайли и deep dive-ins.

18032026

Разписвам един голям пътепис за Белфаст, но ще отнеме време.
Но пък за друго пиша днес – преди няколко дни се сетих за Globus и единствената тяхна песен, която знам – “Save me”.

Save me я използвах когато исках да се счупя на колелото. Имам ярък спомен как бях решил да се строша на колелото (още бях със стоманения красавец) и около с. Крушари бях направил средна скорост, която беше нечовешка (за мен). И през цялото време в слушалките беше “Save me”.

Как да е, сетих се за песента, пуснах си я и после понеже не бях решил какво ще слушам оставих албума да се завърти. И ме изненада супер много. От тази случка до днес съм въртял само него в Spotify.

Запознайте се с Globus – Break from this world

Абсолютно разнообразие от стилове и усещание в един единствен албум прави цялото изживяване чудесно, защото не омръзва. Препоръчвам повечето песни. Голямо разнообразие и страхотна артистичност.

16022026

Не безизвесния Луис Росман говори за AI камерите в Happy. Освен това същите са опитали да му свалят канала:

11032026

Още си пиша кода за BelTech2026 така, че още малко търпение. Прибрах се в 2 сутринта в понеделник и още не мога да се наспя.

НО пък днес се случи нещо, което не се случва често. В добрите практики казваме, че terraform трябва да си има освен state file и lock state mechanism, който в AWS правим с dynamoDB. Е – днес ми се случи да се настъпим с един колега докато той прави terraform apply по времето в което аз правих същото. Резултата – предотвратих си болката от това да се гръмна в коляното:

$ terraform plan -var-file=environments/tf2.tfvars 2>&1
│ 
│ Error message: operation error DynamoDB: PutItem, https response error
│ StatusCode: 400, RequestID:
│ CMFNDGHS3N2DGKENAAR69APCFBAV4KQNSO5AEMVJFAAA9ASUAAJG,
│ ConditionalCheckFailedException: The conditional request failed
│ Lock Info:
│   ID:        7881e9ef-1ae6-bd1f-70a0-6eab6efcd909
│   Path:      [REDACTED]/terraform.tfstate
│   Operation: OperationTypePlan
│   Who:       nedko
│   Version:   1.14.6
│   Created:   2026-03-11 08:24:42.568778233 +0000 UTC
│   Info: 
│ 
│ 
│ Terraform acquires a state lock to protect the state from being written
│ by multiple users at the same time. Please resolve the issue above and try
│ again. For most commands, you can disable locking with the "-lock=false"
│ flag, but this is not recommended.