🍲„Ha Működik, Ne Nyúlj Hozzá" Style
★★★★★ 6 éve főAdag: az egész cégNehézség: ne nyúlj hozzá
Hozzávalók
- 1 fizikai szerver egy irodai szekrény alján, aminek a ventilátora már 6 éve zúg megállás nélkül
- PHP 5.6, mert „a migráció túl kockázatos lenne"
- Egy csomó cron job, amit senki sem ír le, csak azt tudni, hogy ha leállnak, vége a világnak
- FTP hozzáférés, jelszó:
admin123, változatlanul 2011 óta - 1 fejlesztő, aki egyedül érti az egészet, és épp nyugdíjba megy jövő hónapban
Elkészítés
- Ne frissíts semmit. Soha. A frissítés az ellenség.
- Ha a szerver full lehal, kapcsold ki, majd vissza – ez 87%-ban működik.
- Backup? Minek, hisz „eddig sose volt gond".
- Amikor a kulcsfejlesztő elmegy, add át a tudást egy 3 oldalas Word dokumentumban, amit soha senki nem fog elolvasni.
Tálalás módja: Rettegéssel, minden pénteken, amikor valaki azt mondja: „csak egy gyors deployt csinálok még a hétvége előtt."
Teljes recept »🍮avagy a Fejlesztő Utolsó Vacsorája
★★★★★ Idő: egész hétvégeAllergén: var_dumpNehézség: pénteki
Hozzávalók
- 47
var_dump() hívás, szétszórva a kódban, mint a morzsák Jancsi és Juliska meséjében - 1 elfelejtett
die();, ami miatt a teljes checkout egy üres fehér oldalon landol production-ben - Xdebug, amit soha senki nem állított be rendesen, úgyhogy inkább print-eljük ki az egészet
- Pánik, frissen őrölve, közvetlenül a „MIÉRT NEM MŰKÖDIK" pillanat előtt
Elkészítés
- Debugoláshoz szórd szét a
var_dump()-okat mindenhova, ötletszerűen. - Találd meg a hibát, javítsd ki.
- Felejts el kitörölni EGYETLEN
var_dump(); die();-t egy mélyen beágyazott függvényből. - Deployold pénteken este.
- Told magad hétvégén, amikor az ügyfél ír, hogy „az oldal üres, csak egy szám van rajta:
array(3) { ... }".
Séf megjegyzése: Ez az étel garantáltan tökéletes minden alkalommal – legalábbis addig, amíg valaki élesben nem próbálja meg.
Teljes recept »🍝egy fájl, ezer könny
★★★★★ 500 sor / 1 fájl12 egymásba ágyazott ifNehézség: olvashatatlan
Hozzávalók
- 500 sornyi kód egyetlen fájlban, mert a mappák túl bonyolultak
- 12 egymásba ágyazott
if, mindegyik más indentálással - 1 nagy adag
include és require, random sorrendben - Só és bors helyett
@ operátor mindenhova, hogy a hibák csendben maradjanak
Elkészítés
- Mindent egy tálba öntünk, jól összekeverjük.
- Reménykedve tálaljuk, hogy senki nem akarja majd módosítani.
- Ha valaki mégis hozzányúl, az egész szétesik – ez a titkos fűszer.
A séf titka: A refaktorálás olyan, mint a Jenga: húzz ki egy sort, és imádkozz.
Teljes recept »🥩2003-as hőmérsékleten, well done
★★★★★ Hőfok: 2003error_reporting(0)Nehézség: garantált SQL injection
Hozzávalók
- 1 db
<?php tag – a becsületére legyen mondva, ez az egyetlen konzisztens dolog a nyelvben - 3 marék globális változó, mert a scope az gyengéknek való
- 1 csomag
== és ===, hogy sose tudd biztosan, mi történik ("0" == false? Persze, miért ne) - Egy csipet
mysql_query() – 2015 óta deprecated, de a nagyi receptje ez - Rendesen kevert
array_map, array_filter, array_walk – mindegyik más sorrendben veszi az argumentumokat - 1 üveg Composer dependency hell, jól felrázva
- Egy csepp NULL, ami valójában "", ami valójában 0, ami valójában igaz is meg hamis is
Elkészítés
- A szervert felmelegítjük 2003-as hőmérsékletre – a PHP ott érzi otthon magát.
- Beleírjuk a kódot, lehetőleg HTML-lel összekeverve, mint egy jó gulyáslevesbe.
- Hozzáadjuk az
error_reporting(0)-t, hogy ne lássuk, mennyire ég a konyha. - Lassú tűzön pároljuk, amíg elő nem jön egy
Warning: Undefined variable – ez a jel, hogy jól halad. var_dump()-oljuk időnként, csak hogy szenvedjünk egy kicsit együtt vele.- Frissen tálaljuk, mielőtt rájövünk, hogy a
$id útközben string-ből int-té, majd vissza stringgé változott.
Tálalás: Egy oldalán JavaScript, másikon SQL injection lehetőség – így hagyományos. Garnírungnak egy csipet „de a Facebook is PHP-t használ, szóval nem is lehet olyan rossz" önigazolás.
Teljes recept »🍛avagy „Bízzunk a Felhasználóban" különlegesség
★★★★★ Fűszer: OR 1=1Prepared statement: 0Nehézség: DROP TABLE users
Hozzávalók
- 1 nagy adag nyers, szűretlen felhasználói input, közvetlenül az URL-ből kanalazva
- 1 SQL lekérdezés, amibe simán belefűzzük a fenti inputot, mert a prepared statement az drága étterem
- Egy csipet
htmlspecialchars() – de csak elvétve, ünnepnapokon - 3 evőkanál naiv bizalom, hogy „úgyse fog senki
'; DROP TABLE users;---t írni oda" - Egy teáskanál pánik, amit majd 2 év múlva adunk hozzá, amikor kiderül, hogy valaki mégis megtette
Elkészítés
- Az inputot egyenesen a lábosba öntjük, keverés vagy tisztítás nélkül – a nyers íz a lényeg.
- Az SQL lekérdezést string-összefűzéssel készítjük, mert a
? placeholder túl sok gépelés. - Lassú tűzön főzzük, amíg valaki rá nem jön, hogy az admin jelszavát meg lehet nézni egy
OR 1=1-gyel. - Tálalás előtt imádkozunk, hogy a pentester ne vegye észre – vagy ha igen, legalább kedvesen írja meg a jelentésben.
Séf megjegyzése: Ez az étel azoknak való, akik szeretik az izgalmat és a hajnali 3-as „PROD ADATBÁZIS ÜRES" telefonhívásokat.
Teljes recept »🍜7-es verzió, de valójában még 5.6 szagú
★★★★★ 10 év érlelésJelszó: plaintextNehézség: ha leáll, nem indul újra
Hozzávalók
- 1 szerver, amit „majd frissítünk, csak most nem érünk rá"
mysql_* függvények, mert az mysqli már túl modern- 1 csipet
register_globals, ha épp valaki nagyon nosztalgiázik - Jelszavak, sima szövegben tárolva, mert „úgyse néz bele senki"
Elkészítés
- Hagyd állni 10 évig egy sarokban futó szerveren.
- Ne érj hozzá, mert ha egyszer leáll, soha többé nem indul újra.
- Tálald félelemmel és imádsággal.
A séf tanácsa: A legjobb leves az, amit sosem kavarsz meg. És sosem nézel bele. És a létezéséről is elfeledkezel.
Teljes recept »🎂47 réteg tiszta technikai adósság
★★★★★ 47 plugin8 mp betöltésNehézség: 3 plugin ütközik
Hozzávalók
- 1 alap PHP tészta
- 47 plugin, ebből 30 már nem frissült 2019 óta
- 1 sablon, amit „valaki egyszer testreszabott", senki sem tudja hogyan
- Bőséges
wp_options tábla, ami folyamatosan dagad
Elkészítés
- Rétegezzük egymásra a pluginokat, amíg az oldal betöltési ideje el nem éri a 8 másodpercet.
- Tálalás előtt győződj meg róla, hogy legalább 3 plugin ütközik egymással – ez adja az igazi „miért nem működik" élményt.
A cukrász jegyzete: Ha a torta összedől, az nem a te hibád. Az egy plugin update volt.
Teljes recept »🥪Klasszikus Zavarodottság, három feltétben
★★★★★ Eredmény: mindig másDokumentáció: 0Nehézség: vibe-alapú
Hozzávalók
- 1 szelet változó, aminek az értéke lehet
null, "", 0, false, vagy egyszerűen nem is létezik - 3 különböző ellenőrző függvény, mindegyiket más fejlesztő preferálja
- Egy nagy adag vita a code review-ban arról, hogy melyik „a helyes"
- Semmi dokumentáció, csak vibe-ok
Elkészítés
- Az első fejlesztő
isset()-et használ, mert „ez a standard". - A második
empty()-t, mert „ez lefedi az összes esetet is". - A harmadik
=== null-t ír, mert „explicit jobb, mint implicit", majd csodálkozik, hogy a kód mindenhol hibát dob. - A negyedik egyszerűen
@-ot rak elé, és hazamegy.
Tálalás: Mindenki más eredményt kap ugyanarra a bemenetre. Ez nem hiba, ez feature – a PHP demokratikus nyelv, mindenkinek igaza lehet egyszerre.
Teljes recept »