Kako obezbediti WordPress sajt

Kako obezbediti WordPress sajt

Updated: 31/08/2019.

U ovom članku ću objasniti kako obezbediti WordPress sajt. Platu dobijam za administraciju sistema – tako da shvatam kako radi Internet, zaštite, računari, serveri i slično. Ipak, nisam neki “super-haker”, niti ekspert za Linux serverske sisteme. Sve informacije ovde date su na osnovu dosadašnjeg ličnog iskustva i znanja – ispravke i dopune su dobrodošle.

Sadržaj:

  1. Uvod
  2. Bezbedne navike
  3. Računar
  4. Hosting server / provajder
  5. Domen registrar
  6. SSL/TLS sertifikati i enkripcija
    …6.1. HSTS
  7. Cloudflare
  8. Obezbeđivanje WordPress-a
    …8.1. Zabranja listanja direktorijuma
    …8.2. Nalozi administratora i korisnika
    …8.3. Teme, plaginovi i WordPress jezgro
    …8.4. Bezbednosni plaginovi
    …8.5. Komentari
    …8.6. Dodatne bezbednosne izmene
  9. Loši saveti
  10. Zaključak


1. Uvod

Ako na Internetu kucate “kako obezbediti WordPress sajt” (ili slično na engleskom), dobićete hiljade stranica. Ono što sam primetio (opet, ograda, na osnovu svog znanja i iskustva) je da tu ima puno loših, čak i (potencijalno) štetnih saveta.

Ovde ću navesti stvari koje preporučujem, uz komentar nekih često susretanih saveta za koje mislim da nisu baš najbolji.

Važna napomena: ZAPISUJTE sve što radite/menjate. Ako se bilo šta pokvari, znaćete kako da vratite sve na početak i pronađete uzrok. Radite jednu izmenu, testirajte, pa onda tek sledeću. U suprotnom ćete isto imati velikih problema da otkrijete gde je zapelo.

Osnovna stvar kada je reč o bezbednosti je to da je ona kao lanac – jaka koliko i najslabija karika. Ne svodi se samo na dobre antiviruse i firewallove, već su i ponašanje i navike veoma važni. Šta vredi najbolji alarm ako ostavljate ključeve na izvol’te? Volim kada mi objašnjavaju korištenjem jasnih analogija, pa ću ih i sam koristiti u ovom tekstu.

Svaki vid zaštite uvodi i određenu “nepraktičnost” pri upotrebi. Ako zaključate vrata kuće, morate izvaditi ključ i otključati ih da biste ušli. Dve brave: više sigurnosti, ali i “cimanja” oko zaključavanja i otključavanja.

Uz to: 100% siguran sistem je neupotrebljiv – po definiciji. Zamislite bunker/sef bez prozora, sa svim zidovima od armiranog betona i debelim čeličnim vratima. Ta vrata moraju imati neki sistem otključavanja i relativno lakog ulaska za one koji su ovlašteni. Upravo ovo predstavlja bezbednosni rizik i sa dovoljno znanja, vremena i alata se može “hakovati”. Jedini način da sistem bude 100% siguran je da ne bude vrata, već samo armirani beton. Tada bunker nema ni jednu slabost, ali je istovremeno i potpuno neupotrebljiv.


2. Bezbedne navike

Kratka, taksativna, lista bitnih stvari, koje nisu vezane usko samo za WordPress, ali važe i tu:

  • Koristite sigurne i bezbedne računare (i mobilne) za logovanje i rad na sajtu.
  • Koristite sigurnu Internet konekciju. Ako ste na mreži kafića i slično, koristite VPN – na primer NordVPN (affiliate link).
  • Nemojte ostavljati snimljene lozinke za pristup u browserima i na uređajima. Ako baš morate, koristite barem LastPass. Mada bih preporučio čuvanje lozinki u KeePass, ili sličnom programu (kompatibilan Mac KeePass klijent i Linux KeePass klijent – samo nađite svoju distribuciju na KeePass download stranici, ili koristite software manager).

Loše bezbednosne navike su kao ranije pomenuto ostavljanje ključeva na javnom mestu (bez nadzora).


3. Računar

Da, možda zvuči očigledno, ali prva karika u lancu, računar sa kojeg se “kačite” na sajt bi trebalo da je sigurna. Dakle: sigurnosne zakrpe ako se koristi Windows, uz dobar firewall i antivirus program. Dobar besplatan je 360 Total Security.

Vodite računa i o tome da je browser osvežen novim zakrpama (“apdejtovan” što bi rekli). Moj favorit za ovu namenu je Yandex, ali svakako vredi proveriti kako sajt izgleda i na Mozilli, Chromeu, kao i mobilnim telefonima.

Ne znam vredi li spominjati da je bolje ne prijavljivati se na svoj računar sa administratorskim pravima pristupa ako se ništa ne želi de/instalirati, ili podesiti u radu sistema. Ovo veliku većinu ljudi nervira (da se moraju odlogovati i ulogovati kao administrator za neku instalaciju), ali dobra je, a jednostavna zaštita od instalacije virusa i drugih štetnih programa.

Korištenje nebezbednog računara je kao da komšiji dovikujete, tako da svi mogu čuti: “ključevi su ispod vaze!”


4. Hosting server / provajder

Mnogi ljudi (ne svi) krenu od (naj)jeftinijeg hostinga. Onda naiđu problemi. Nakon toga mnogi traže “bolji, makar i skuplji”. Dobro podešen i obezbeđen hosting server je veoma bitna karika u lancu, ali i dalje samo to – jedna od karika. Ako drugi aspekti (koje ću ovde pomenuti) nisu kvalitetno urađeni, hosting sam po sebi nije dovoljan za zaštitu sajta. Ipak, ako hosting server nije dobro podešen, sve ostalo je uzaludno – mada ovo važi i za sve ostale aspekte (karike u lancu bezbednosti sajta).

Za one koji koriste VPS, ili dedicated servere: ako niste 100% sigurni šta radite (ako jeste, onda ne morate uopšte čitati ovaj članak – znate verovatno više od mene), razmotrite managed hosting server.

Shared i reseller hosting paketi su svakako na serveru koji drugi održavaju.

U svakom slučaju: birajte hosting kompaniju sa dobrom reputacijom, kvalitetnom uslugom i dobrom zaštitom. Moje preporuke za hosting.

Većina uspešne zaštite od DDoS i brute force napada se izvodi na nivou hosting servera i firewall-a i WAF-a.

Korištenje hosting servera koji nije dobro obezbeđen je kao prizemna kuća sa staklenim vratima i prozorima: lako se provali prostom grubom silom.


5. Domen registrar

Puno puta sam se susreo sa sledećom situacijom:

Sajt se hostuje kod lošeg hosting provajdera, a domen je registrovan… preko istog tog hosting provajdera. Neki hosting provajderi nude besplatnu registraciju domena preko njih ako uzmete hosting. Mada samo prve godine. Kasnije ta cena zna biti i nešto viša od “tržišne”. Pitanje je i da li ste slobodni da premestite registraciju domena na drugi registrar, pogotovo ako poželite promeniti i hosting provajdera.

Koristim i preporučujem Namecheap (affiliate link) domen registrar. Cene registracije i obnavljanja su povoljne, nude besplatnu whois zaštitu i zaključavanje domena od migracije, kao i zaštitu sa 2 faktora, pomoću broja mobilnog telefona. Lak pregledan meni, aplikacija za mobilni – sve mi se sviđa.

Za koji god domen registrar da se odlučite, vodite računa da se domeni obnavljaju na vreme – najbolje za dve, ili više godina unapred za domene koje planirate zadržati. Većina registrara obično automatski obnavlja registraciju pre isteka (osim ako korisnik to isključi). Ipak, može se desiti problem sa naplatom sa kreditne kartice, a bilo je i slučajeva da automatska obnova zakaže. Zato je sigurnije voditi računa o vremenu isticanja registracije domena i ako je tekuće godine – produžiti za barem još jednu godinu.

Google “voli” kada je domen registrovan na duže – dajući sitnu prednost u rangiranju sajtovima koje smatra stabilnim i pouzdanim (nepotvrđena glasina za koju ne mislim da je treba 100% zanemariti).

Nevođenje računa o obnovi domena je kao da ne proveravate dug za porez – možete ostati bez kuće.
Loš i nesiguran domen registrar je kao da ne zaštitite autorska prava na svoj brend – može vas koštati puno novca i vremena da ih povratite.


6. SSL/TLS sertifikati i enkripcija

Još uvek ima sajtova koji ovo ne koriste, ili barem dozvoljavaju pristup i preko neenkriptovanog http protokola. Ako nemate baš jak razlog protiv, implementirajte i forsirajte https protokol za svoj sajt. Isto važi i za FTP, e-mail i ostale kanale komunikacije i pristupa sajtu.

LetsEncrypt sertifikati su besplatni i laki za instalaciju (jednim klikom kod mnogih hosting provajdera).

Kada pristupate sajtu preko nezaštićenog http protokola, moguće je videti šta šaljete – pa i korisničko ime i lozinku. Https treba da bude obavezan, tj. da se “forsira” na nivou servera, bez da se ostavlja izbor korištenja nezaštićenog http-a posetiocima (i vama).

Pristupanje sajtu bez https i TLS enkripcije je kao da poverljiva dokumenta ostavite vidno na stolu u čitaonici, da svako dovoljno zainteresovan može da “virne”.

O tome kako podesiti https pisao sam u članku o redirekcijama.

6.1. HSTS

Za razliku od SSL/TLS i https protokola, HSTS je nešto što još uvek mislim da nije uputno za veliku većinu sajtova. Šta je to HSTS uopšte?

Uprošteno rečeno: to je objava da vaš sajt koristi isključivo https, (praktično) zauvek. U slučaju bilo kojih problema sa sertifikatima, ili potrebe (iz bilo kojeg razloga) da se koristi protokol bez enkripcije, sajt će biti nedostupan preko ne-enkriptovanog http-a.

Dobar tekst koji u detalje objašnjava problematiku (na engleskom): OPINION – Dangerous Web Security Features.

HSTS je kao vratar na ulazu zgrade koji sve vaše goste sprovodi isključivo do stana broj 42. Ako promenite stan, iz bilo kojeg razloga, oni će i dalje biti sprovođeni do vrata broj 42 i samo tu.

Zbog ovoga pre uvođenja HSTS-a treba dobro promisliti i isplanirati. Ako sajt nije “meta visokog rizika” (kao što su veoma popularni, ili bankarski, veći e-commerce sajtovi i sl.), bolje je, ipak, još uvek, preskočiti HSTS do daljnjeg – može stvoriti više problema, nego što ih rešava i tražiti angažovanje eksperta za njihovo prevazilaženje.


7. Cloudflare

Pre posvećivanje samom WordPress-u, treba spomenuti i Cloudflare. Pored usluge DNS-a u besplatnom paketu, kao i osnovnih CDN funkcija, Cloudflare nudi i određen nivo zaštite od SQL injection i DDoS napada (DNS funkcija mi je veoma zgodna pri migraciji sajtova).

Takođe, kao i ostali vidovi zaštite, Cloudflare uvodi i dodatni nivo složenosti. Recimo, komplikacija pri podešavanju sa Engintronom i Nginx serverom. Tako da kod ovog morate izvagati za sebe. Lično volim Cloudflare i mislim da je vredan truda – barem ovako kako za sada radi.


8. Obezbeđivanje WordPress-a

Po ovom pitanju sam naišao na najviše pogrešnih, kontraproduktivnih saveta. Ipak, prethodno opisani koraci su barem podjednako važni za bezbednost WordPress sajtova – implementirajte ih.

Činjenica: većina WordPress sajtova su hakovani zbog loših, ili zastarelih plaginova, ili tema.

Redosled kojim ću navoditi bitne stvari je da tako kažem “od dole” – počev od samog servera, preko WordPress jezgra, na kraju do tema i plaginova. Krenimo redom.

8.1. Zabranja listanja direktorijuma

Ako hakeri ne mogu videti sadržaj direktorijuma sajta i spisak fajlova, teže će pronaći slabosti.

Ovaj vid obezbeđenja se zove “obezbeđivanje kroz sakrivanje” (eng. “security through obscurity”). Neki stručnjaci potcenjuju ovaj vid zaštite kao naivan. Drugi se pak previše oslanjaju na njega. Moje mišljenje: ako ništa ne košta (ne pravi dodatne probleme i komplikacije), onda je svako otežavanje posla hakerima dobro. Spomenuću ponovo ovaj poslednji boldovani deo kada budem pisao o nekim kontraproduktivnim bezbednosnim merama.

Ako ovo već nije urađeno, editujte sami .htaccess fajl, ubacujući sledeći kod na početku (copy/paste koda ispod će uraditi posao):

# GREMLIN (custom) CHANGES

Options -Indexes

# END OF GREMLIN (custom) CHANGES

Druge mere obezbeđivanja bi trebalo da je provajder svakako uradio na nivou servera. Za slučaj da nije, spisak je na na Sucuri stranici o obezbeđivanju WordPress-a.

Naprednije opcije za ograničavanje prava upisa i izmena, date su na zvaničnoj stranici WordPress-a. Nisu na odmet, mada neće sve raditi sa svim sajtovima (i temama) – probajte.

8.2. Nalozi administratora i korisnika

Nešto veoma slično ovome viđam previše često:
korisničko ime: admin
lozinka: admin123

Administratorski nalog na sajtu treba da bude takav da se ne može pogoditi. Recimo da korisničko ime bude: “Averel” i slično. Nikakve veze sa sajtom, autorom, temom kojom se sajt bavi, a pogotovo da se ne zove “admin”, “administrator” i slično.

Lozinka treba da je dužine od barem 10 karaktera, sa barem jednim Velikim slovom, brojkom i specijalnim karakterom (%, !, $ i slično). Isto važi i za lozinku korisnika sa pravima pristupa bazi (namešta se na hosting serveru).

Nalozi autora, čije korisničko ime je vidljivo na sajtu, ne treba da imaju administratorska prava i moraju isto imati jake lozinke. Za sve “poslove” na sajtu koji se mogu uraditi sa pravima autora, prijavljujte se tim korisničkim imenom i lozinkom – koristite administratorsku samo kada je to potrebno.

Ako je dozvoljeno prijavljivanje na sajt, stavite da podrazumevani nivo prava pristupa bude “Subscriber”.

8.3. Teme, plaginovi i WordPress jezgro

Bezbednosni propusti u temama, plaginovima, ili ne-apdejtovana verzija WordPress su najčešći “krivac” za hakovanje i infekcije sajtova.

Redovno ih apdejtujte (ali pre toga uradite bekap i isprobajte prvo kako rade na testnoj verziji sajta, za svaki slučaj).

Birajte teme i plaginove koji su provereni i dobro napisani. O izboru plaginova sam već pisao, sličan princip važi i za izbor teme.

Obrišite sve teme i plaginove koji se ne koriste. Zašto ostaviti više potencijalnih bezbednosnih rizika (vrata), ako nisu potrebni za funkcionisanje sajta?

Sajt za proveru aktuelnih pronađenih bezbednosnih propusta WordPress plaginova: WPscan vulnerability database. Tu možete uraditi pretragu plaginova koje (nameravate da) koristite i videti imaju li nekih bezbednosnih propusta koji još nisu “zakrpljeni”.

8.4. Bezbednosni plaginovi

Od bezbednosnih plaginova, jedino Sucuri (koliko znam), u plaćenoj verziji, nudi zaštitu pre nego što napad stigne do sajta (firewall i WAF).

Ostali se aktiviraju kada je napadač već došao do sajta. U besplatnim verzijama omogućavaju neku osnovnu zaštitu i skeniranje sajta na viruse. Sviđa mi se WordFence. Omogućava (kao i mnogi drugi): ograničavanje broja pokušaja logovanja, pre blokiranja IP adrese (i podešavanje na koliko). Ako se isključe sve opcija za “live” izveštavanje i snimanje saobraćaja i automatsko skeniranje, neće previše opterećivati server, a ipak nudi neki nivo dodatne zaštite.

WordFence pravi i statistiku detektovanih pokušaja napada, IP adrese, pokušana korisnička imena i slično. Može se i podesiti da automatski odmah blokira IP adresu svakoga ko pokuša da se uloguje sa korisničkim imenom “admin”, na primer.

8.5. Komentari

Ako su na sajtu dozvoljeni komentari, postoje plaginovi (poput Google Captcha (reCAPTCHA) by BestWebSoft) koji sprečavaju spam preko komentara pretplatnika. Može se staviti (u Discussion opcijama WordPress-a) da samo registrovani i ulogovani pretplatnici mogu pisati komentare. Još ako se uključi opcija da pretplatnici moraju imati barem jedan odobren komentar kako bi se njihovi komentari mogli objavljivati bez moderacije, količina spama putem komentara se svodi na minimum.

Ovo je manje vezano za samu bezbednost, više za reputaciju sajta i smanjivanje nepotrebnog opterećenja servera.

8.6. Dodatne bezbednosne izmene

Sprečavanje clickjacking napada:

Otvorite wp-config.php fajl (na root-u direktorijumu gde je WordPress instaliran na serveru) i unesite sledeću liniju na početak:

header('X-Frame-Options: SAMEORIGIN');
Dodavanje koda u wp-config.php
Dodavanje koda u wp-config.php
Slika 1

Ovo se može uraditi i dodavanjem koda u funcions.php child teme, ali u slučaju promene teme, treba se setiti i uraditi ponovo, za novu temu.

Treći način da se to uradi je izmenom .haccess fajla (za Apache servere). Hosting provajder vam mora dozvoliti mod_headers opciju kako biste bili u mogućnosti da ovo implementirate. Kod, koji se dodaje na početku fajla je sledeći:

# GREMLIN (custom) CHANGES

Options -Indexes

<IfModule mod_headers.c>
	Header always append X-Frame-Options SAMEORIGIN
</IfModule>

# END OF GREMLIN (custom) CHANGES

Za NGINX servere:

add_header X-Frame-Options "SAMEORIGIN" always;

Obrišite keš sajta i proverite u browseru (pritiskom na f12, pa učitavanjem sajta) da li radi:

Proverite da li su x-frame-options ažurirane, trebalo bi da glase: "SAMEORIGIN"
Proverite da li su x-frame-options ažurirane, trebalo bi da glase: “SAMEORIGIN”
Slika 2

Sprečavanje XSS (Cross Site Scripting) napada:

Sledeći kod treba dodati u wp-config.php. Kod će govoriti browseru da prihvata kolačiće samo sa sajta i to isključivo preko https protokola. Ako vaš sajt koristi http, izostavite srednji (drugi) red:

@ini_set('session.cookie_httponly', true);
@ini_set('session.cookie_secure', true);
@ini_set('session.use_only_cookies', true);


9. Loši saveti

Ovo me je delom i nagnalo na pisanje ovog članka (uz pružanje uputstava početnicima kako da obezbede svoj WordPress sajt, bez da 100 puta isto pričam). Sve gore navedene zaštitne mere nisu urađene na velikom broju sajtova. Ipak, više ljudi koji sve to nisu implementirali su čuli i pitali me kako da implementiraju sledeće “famozne” bezbednosne mere:

  • Sakrivanje URL adrese za logovanje na WordPress sa podrazumevane wp-admin, wp-login.
  • Izmena prefiksa WordPress baze, da ne bude wp_.

Zašto mislim da su ovo loši saveti? Razloge sam “dotakao” u poglavlju 8.1.

  • Mogu praviti komplikacije (odmah, što je bolja varijanta, ili u budućnosti) sa radom nekih tema i plaginova.
  • Dok u isto vreme, čak i izmenjeni, mogu biti otkriveni od strane napadača.

Suma sumarum:

  • Ako su primenjene sve ostale ovde navedene bezbednosne polise, promena URL-a za logovanje i prefiksa baze nisu potrebni.
  • Ako nisu primenjene ostale bezbednosne politike, promena URL-a i prefiksa baze neće pomoći.

Ah, da, zamalo da zaboravim: isto važi i za sakrivanje verzije WordPress-a, ali to je puno manje “popularna” mera koliko sam imao iskustva.


10. Zaključak

Vaš WordPress sajt će biti hakovan/zaražen. Moj sajt će biti hakovan/zaražen. Nije pitanje “da li”, nego “kada?” WordPress je daleko od najbolje optimizovane i najbezbednije platforme. Šta onda i čemu sve ovo?

Prvo: dobra politika zaštite će pomoći da problemi sa sajtom budu dovoljno retki, a ne redovna pojava.

Drugo: dobra politika zaštite omogućava da se problemi uoče na vreme, što ranije.

Treće: bekapi. Pravite redovno bekape, posle svake izmene sadržaja i pre svakog apdejta teme/plagina/WordPress-a. Čuvajte barem po jednu kopiju bekapa za svaki prethodni mesec, barem godinu dana u nazad. Zašto?

Recimo da pravite bekape na nedeljnom nivou. I čuvate samo poslednja dva. Može se desiti da virus na sajtu otkrijete tek nakon mesec dana, a tada nećete imati ni jedan bekap od vremena pre zaraze. Uklanjanje virusa sa sajta je mukotrpan i skup posao, sa upitnim ishodom.


To je otprilike to. Ažuriraću ovaj (kao i ostale članke) sa novim saznanjima kako vreme prolazi. Nadam se da će još nekom koristiti. Sve ispravke, dopune i sugestije su dobrodošle.

Share...

Komentiraj

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.