Kako osigurati i optimizovati WordPress

Najpopularniji CMS današnjice, WordPress, je svakodnevno na „udaru“ kada je reč o pronalaženju sigurnosnih propusta. Naši sistem administratori svakodnevno imaju glavobolje zbog mnogobrojnih propusta u WordPress pluginima i temama jer ljudi najčešće naprave sajt i više ne brinu o njemu. Iako naš cPanel web hosting poseduje napredni malware & exploit skener u realnom vremenu, dese se situacije da sajt ipak biva kompromitovan i nastavi da funkcioniše sa skrivenim zlonamernim skriptama sa redirekcijama, reklamama, spam porukama koje šalje u vaše ili tuđe ime.

Jasno je da ne želite da se to isto desi i vašem sajtu, zato predstavljamo 9 koraka za osiguranje i optimizaciju WordPress-a za što bolji rad.

1. wp-config.php podešavanja

Verovatno ste videli taj fajl, on pored podataka za vezu sa bazom, može imati neke dodatne parametre, a mi predstavljamo neke od njih i funkcije.

WP_DEBUG uključujete kada imate problem sa sajtom, a ne možete pronaći grešku, u suprotnom treba biti isključen.
WP_POST_REVISIONS ne čuva više od XX revizija, mi smo izabrali da je zlatna sredina 10. Time olakšavate bazu i ne čuvate nepotrebne edite postova i stranica.

EMPTY_TRASH_DAYS služi za brisanje stranica ili postova koje su u Trash-u (kanti za brisanje). Preporuka da period ne bude manji od 10-20 dana.
WP_ALLOW_REPAIR može biti koristan ukoliko server na kome se nalazi sajt doživi problem, iznenadni reboot ili sličnu grešku hardversku ili softversku. Šansa da se srušila neka od tabela koja je bila aktivna je preko 20%. Tada je neophodan REPAIR odnosno oporavak baze, ova komanda će automatski pokrenuti REPAIR tabele čim dođu posetioci.
WP_MEMORY_LIMIT – limit virtualne memorije koju će koristiti WordPress, preporuka da se postavi barem 512M.
WP_CRON_LOCK_TIMEOUT – korisno podići na 480 sekundi da se ne pokreće sa svakom novom posetom, alternativa je potpuno isključivanje što ne preporučujemo, svakako komanda je prikazana ispod.

Šta je cron? U bukvalnom prevodu posao, okidač. Svaki posetilac služi kao okidač ka WordPress jezgru sa listom zadataka koje treba da uradi. To može biti objava članka, razni tipovi ažuriranja, komentara i sl.

define('WP_DEBUG', false);
define('WP_POST_REVISIONS', 10);
define('EMPTY_TRASH_DAYS', 20 );
define('WP_ALLOW_REPAIR', true);
define('WP_MEMORY_LIMIT', '512M');
define('WP_CRON_LOCK_TIMEOUT', 480 );

WP cron se pokreće sa svakom novom posetom, ako želite da potpuno isključite, što ne preporučujemo (bolja opcija je limitiranje na određeno vreme) to možete uraditi sa komandom ispod.

define('DISABLE_WP_CRON', 'true'); //potpuno isključivanje CRON-a

Želite da onemogućite ažuriranje teme i plugina te onemogućivanje neautorizovanih korisnika da to isto rade? Koristite sledeće komande. Razmotrite da li ćete koristiti ove funkcije.

define( 'DISALLOW_FILE_MODS', true );
define( 'DISALLOW_FILE_EDIT', true );

Ako koristite CDN kao što je MaxCDN ili JetPack, preporuka je da definišete cookie, tako ćete ubrzati sam sajt:

define( 'COOKIE_DOMAIN', 'imedomena.com' );

Autosave funkcija dok pišete članak može biti izuzetno korisna, ali prečesto automatsko čuvanje može dodatno opteretiti posećen sajt koji je na manjem paketu, stoga preporuka je da povećate vrednost na 180 sekundi.

define('AUTOSAVE_INTERVAL', 180);

Ako koristite javne WiFi mreže, obavezno koristite HTTPS konekciju za pristupanje Administraciji WordPress-a, ispod imate dodatnu komandu da pristupanje uvek ide preko enkripcije. (Ne podešavajte ukoliko Vaš WordPress nije podešen na HTTPS saobraćaj ili nemate SSL sertifikat na sajtu).

define( 'FORCE_SSL_ADMIN', true );

2. Podešavanja na .htaccess fajlu

.htaccess fajl imate ukoliko koristite Apache ili Litespeed server kao osnovni web server, što je velika verovatnoća. Fajl je sakriven, možete ga videti kroz FTP/SSH, ali je providniji od ostalih zbog prefiksa tačke.

Preporuka je da zabranite javni pristup fajlovima xmlrpc.php i wp-config.php iz sigurnosnih razloga.

<Files "xmlrpc.php">
Order Deny,Allow
Deny from all
</Files>
<Files "wp-config.php">
Order Deny,Allow
Deny from all
</Files>

.htaccess fajl mora sadržati i sledeći deo (verovatno će već upisan, ali ako nije znajte da je neophodan jer u suprotnom neće raditi mod_rewrite i imaćete greške na sajtu u vidu nepronađenih stranica.

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

Takođe, neretko se koriste komande mod_deflate, mod_mime, mod_setenvif da bi se omogućilo keširanje.

Veoma je bitno da uključite indeksiranje fajlova, tako ćete sprečiti vršljanje botova po folderima vašeg sajta i svi rezultati će voditi na sam sajt.

Options All -Indexes

U slučaju da želite WordPress saobraćaj potpuno da usmerite na HTTPS (čak i gde stranica nije podešena tako) koristite ovo:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
</IfModule>

3. Dozvole (Permission)

Dozvole na fajlovima menjate kroz File Manager u cPanel-u, FTP ili SSH. Najosetljiviji fajl na čitavom sistemu je wp-config.php, postavite dozvole 0400 odnosno 400 na njega (r——–). U tom slučaju samo vlasnik (server) može da čita taj fajl i niko ne može menjati. Dozvole na folderima wp-content, wp-includes, wp-admin trebaju biti 0755 i to je verovatno već tako podešeno. Na ostalim PHP fajlovima 0644.

4. PHP verzija i opcije

Naša hosting platforma omogućuje promenu PHP verzije, počev od prastare 5.3 do najnovije 7.4. Od neverovatnog je značaja da koristite ažurnu PHP verziju, jer osim što starija verzija (PHP 5.4, 5.5 pa i 5.6) neće pružiti puni potencijal WordPress-a, ona će dovesti do potencijalnih sigurnosnih propusta.

Ne morate koristiti najnoviju verziju jer često u prvih par meseci od objave nije kompatibilna sa određenim temama i pluginovima, ali koristite podržanu aktuelnu verziju kao što je trenutno 7.3 ili 7.2 (mart 2020.).

Da biste promenili PHP verziju uđite u cPanel i izaberite opciju Select PHP version. Uputstvo možete pronaći OVDE.

Preporuka je da povećate memory_limit na barem  512 MB, zavisno od provajdera. DUKA hosting dozvoljava do čak 1GB.

5. Promena podrazumevanog pristupa wp-admin

Onemogućite trećim licima pristup wp-admin stranici. Ovo je bitno iz više razloga, jer sve i da neko zna Vašu šifru on neće znati URL na koji pristupate WordPress administraciji. Na stotine bot skripti će vršiti brutal force attack na Vaš sajt svakodnevno, zašto bi dozvolili da se to dešava kada ovaj problem možete rešiti za par minuta?

Jednostavno uđite u administraciju, izaberite Plugin pa Add new i pronađite plugin Rename wp-login.php  ili mnoge druge plugine slične namene.

6. Optimizacija baze

Od ogromne važnosti je ne pretrpavati bazu, što obično čine razni plugin-ovi kao što je WAF Wordfence ili statistike posetilaca (za to koristite specijalizovani Google Analytics) koji ponekad nanosi više štete nego koristi. Ukoliko imate ogromne baze, konvertujte ih u InnoDB, a svakako naša je preporuka da wp_options i wp_postmeta tabelu indexirate.

ALTER TABLE wp_options ADD INDEX (`autoload`);
 
ALTER TABLE wp_postmeta ADD INDEX( `post_id`, `meta_key`);

Komandom „SELECT COUNT(*), autoload FROM wp_options GROUP BY autoload;“ možete proveriti koliko redova ima indeksaciju. Ranije u tekstu smo spomenuli i limitiranje čuvanja revizija stranica što može olakšati bazu, da se ne bi jedan članak čuvao u 10-20 kopija.

7. Onemogućite komentare

Komentari na WordPress-u su generatori spama, može ih biti neverovatno mnogo, svakodnevno. Ako su neophodni koristite Akismet plugin ili Captcha zaštitu. U slučaju da je sajt prezentacionog tipa i komentarisanje vam nije važno, možete potpuno blokirati komentare.

Najlakši način da to uradite je instalacijom plugina Disable Comments no zagovornici smo što manjeg broja plugina te komentare možete onemogućiti (mada ne svuda) i kroz podešavanja WordPress-a tj. ulaskom u Settings » Discussion.

8. Ažuriranje

Pažljivo birajte broj plugina koji su vam neophodni, svaki od njih je određeni sigurnosni rizik. Birajte samo proverene plugine koji su svežiji od godinu dana, dakle ako plugin nije ažuriran duže od godinu dana razmotrite o opciji da pronađete alternativu za isti.

Iako „Update“ ponekad oteža život, barem 3 puta godišnje ažurirajte plugine, a preporučljivo je i temu jer napadači često ulaze i kroz bušne teme. Pre ažuriranja backup-ujte sve podatke i bazu da biste mogli vratiti ukoliko pođe po zlu.

Sve teme koje ne koristite potpuno obrišite ili stavite dozvole 0000 na njihove foldere. Isto važi i za plugin-ove, jer i disable-ovani su određeni sigurnosni rizik.

Ukoliko nema potrebe za tim, ne zaboravite onemogućiti članstva – registraciju korisnika ako ste slučajno uključili opciju (podrazumevano je isključena opcija).

9. reCAPTCHA na kontakt formama

Poželjno je da da postavite neki vid sigurnosne provere na stranice koje zahtevaju interakciju sa korisnicima kao što su kontakt forme ili formulari, kako biste sprečili gomilanje masovnih spam poruka koji prolaze kroz Vaš sajt odnosno hosting. Najčešći CAPTCHA sastoji se od slike sa iskrivljenim slovima, uz moguće razlike u bojama, postojanje šarene pozadine ili uz prisustvo drugih elemenata koji imaju zadatak da softveru učine nemogućim rešavanje testa.

Skoro svi poznatiji plugini imaju integraciju sa reCAPTCHA, dovoljno je samo da preuzmete API pristupajući sa svog google naloga na ovom linku.

10. WPToolkit osiguranje

I za kraj smo ostavili najvažnije. Pronađite u Vašem cPanel-u alat WordPressToolkit. Ukoliko dobijate poruku da nemate nijedan WordPress sajt na Vašem hosting nalogu, kliknite na Scan, da bi skenirao sve sajtove i pronašao WordPress sajtove na serveru. Kada nakon par trenutaka vidite sajt u rezultatima kliknite na Fix Security i na sledećem prozoru označite sledeća polja (prikazano na slici ispod) i kliknite na Secure dugme na vrhu.

Sada ste optimizovali i osigurali sajt, a i mnoge stavke koje se provlače ranije u ovom članku.