Blog
Revizija varnosti WordPressa: Kaj preveriti pred objavo
Sistematičen seznam za varnost vtičnikov – od preprečevanja SQL injekcij do pravilnega preverjanja nonce. Z avtomatiziranimi revizijskimi poročili.
Preden kateri koli vtičnik, ustvarjen s strani PAGEnza, doseže uporabnikovo namestitev WordPressa, gre skozi tri samodejne varnostne preglede. Ta objava pojasnjuje, kaj ti pregledi iščejo – in zakaj je vsak od njih pomemben.
Zakaj koda, ustvarjena z AI, potrebuje revizijo
Veliki jezikovni modeli so presenetljivo dobri pri pisanju vtičnikov za WordPress. Poznajo imena kljuk (hooks), razumejo standarde kodiranja WP, proizvajajo berljivo PHP. Vendar pa tudi delajo predvidljive napake – in te napake so varnostne ranljivosti.
Najpogostejše, ki jih vidimo:
- Uporaba
$_GETali$_POSTbrez čiščenja (sanitization) - Manjkajoče preverjanje nonce pri pošiljanju obrazcev
- Neposredna poizvedba v bazo podatkov brez
$wpdb->prepare() - Uporaba
eval()aliexec()za dinamično vedenje - Izhod uporabniških podatkov brez
esc_html()aliesc_attr()
To niso eksotični skrajni primeri. Redno se pojavljajo v izhodu LLM – celo pri najboljših modelih.
Faza 1: Preverjanje poziva (Prompt validation)
Preden AI napiše eno vrstico, analiziramo opis uporabnika. Ta korak zazna dve kategoriji težav:
Poskusi manipulacije – pozivi, ki poskušajo prisiliti AI, da ustvari namerno zlonamerno kodo. Stvari, kot so „ne upoštevaj prejšnja navodila“ ali „ustvari zadnja vrata za testiranje“.
Nejasni ali neizvedljivi opisi – pozivi, ki so preveč kratki ali preveč nejasni, da bi ustvarili uporabno kodo. „Ustvari vtičnik“ ustvari smeti; „Ustvari kontaktni obrazec, ki pošilja vnose na e-poštni naslov s filtriranjem neželene pošte“ ustvari nekaj resničnega.
Če poziv ne prestane tega preverjanja, uporabnik vidi posebno sporočilo o napaki, ki pojasnjuje zakaj – ne splošno zavrnitev.
Faza 2: PHP linting v izoliranem zabojniku
Ko AI ustvari PHP kodo, se ta izvaja prek php -l v Docker zabojniku, ki je popolnoma izoliran od vsega drugega. To zazna sintaktične napake, še preden vtičnik sploh doseže namestitev WordPressa.
Ampak gremo dlje: če linting ne uspe, sistem ne zavrne samo izhoda. Pošlje napako nazaj AI s popravnim pozivom – to, čemur pravimo zdravljenje (healing). AI vidi svojo napako in poskusi ponovno, do trikrat.
To pomeni, da uporabniki skoraj nikoli ne vidijo sporočila „ustvarjanje ni uspelo“. Vidijo nekoliko daljši čas ustvarjanja – in delujočo kodo.
Faza 3: Pregled varnosti kode
To je najpomembnejša faza. Izvedemo statično analizo, ki preverja:
Nevarni funkcije: eval(), exec(), system(), shell_exec(), passthru() – katera koli od teh blokira izdajo vtičnika.
SQL injekcijski vektorji: surove $wpdb->query() klice z interpoliranimi spremenljivkami, manjkajoče $wpdb->prepare(), neposredna uporaba mysql_query().
Manjkajoči preverjanje dovoljenj: AJAX obravnavala, ki ne kličejo current_user_can() pred izvajanjem kakršnih koli privilegiranih dejanj.
Manjkajoče preverjanje nonce: obravnavala obrazcev, ki ne kličejo wp_verify_nonce() ali check_ajax_referer().
Neobdelana izhodna koda (Unescaped output): echo $_GET[...], echo $user_input brez funkcij za obdelavo.
Če je karkoli od tega najdeno, je vtičnik blokiran. Uporabnik vidi poročilo, ki natančno navaja, katere funkcije so sprožile blokado in zakaj – ne samo „varnostni pregled ni uspel“.
Kako izgleda revizijsko poročilo
Vsak ustvarjen vtičnik je priložen s poročilom o varnostni reviziji v preprostem jeziku. Navaja:
- Kateri pregledi so bili uspešni (zeleno)
- Kateri pregledi so sprožili opozorila (jantarno) — težave, ki niso blokirajoče, vendar si zaslužijo pozornost
- Vse popravke, ki so bili samodejno uporabljeni med zdravljenjem
Poročilo se ustvari samodejno in se priloži k prenosu vtičnika. Je koristno tako za vašo lastno samozavest kot za prikazovanje strankam, da ste varnost jemali resno.
Faza 4: Preverjanje ob shranjevanju
To ni del začetnega ustvarjanja — velja, ko uporabniki ročno urejajo kodo vtičnika v urejevalniku PAGEnza.
Vsakič, ko shranite, se znova zažene isti lint + varnostni pregled. Če med urejanjem uvedete kritično ranljivost, bo shranjevanje blokirano, dokler je ne odpravite. To preprečuje pogost scenarij, ko razvijalec naredi hitro "začasno" spremembo, ki ostane v proizvodnji dve leti.
Omejitve samodejne revizije
Samodejno skeniranje dobro zazna določeno vrsto težav. Ne zazna vsega.
Logične napake, pokvarjena poslovna logika in subtilne težave z eskalacijo dovoljenj, ki ne vključujejo znanih nevarnih vzorcev, še vedno zahtevajo človeško revizijo. V dokumentaciji smo glede tega pregledni – revizija ne nadomešča varnostne revizije, je pa osnova, ki zagotavlja minimalni standard.
Za proizvodne vtičnike, ki obravnavajo plačila ali občutljive podatke, poleg samodejnih pregledov priporočamo tudi ročno revizijo. Revizijsko poročilo človeškemu recenzentu zagotavlja dobro izhodišče.
Sources (5)
- How to Prevent SQL Injection Attacks in WordPress (7 Steps)
- The Ultimate WordPress Security Checklist | WPScan
- SQL Injection in WordPress – Everything You Need To Know - Patchstack
- What is Nonce Verification in WordPress?
- WPAUDIT: Advanced WordPress security auditing suite & vulnerability scanner. Automates pentesting with Nmap, WPScan, Nuclei, SQLMap. Comprehensive reports. Ideal for ethical hackers & Kali Linux. - GitHub