A WordPress különböző verziói, funkciói, bővítményei számos sebezhető ponttal rendelkeznek, amelyek alááshatják WordPress weboldalunk és az azt látogató felhasználóink adataink biztonságát. Itt egy összefoglaló, hogy mik lehetnek ezek a sebezhető pontok, és hogyan lehet ezek gyengeségei ellen védekezni.
A bejegyzés tartalma címszavakban:
- HTTPS használata
- Clickjacking tiltása és a HTTPOnly cookie-k alkalmazása
- Az xml-rpc tiltása
- HTTP Security header alkalmazása: content shifting tiltása és X-XSS védelem
- Brute force támadás elleni védelem
1. HTTPS használata
Mi a HTTPS?
A HTTPS a HTTP protokol biztonságos (Secure) változata. A HTTP egy kérés – válasz alapú protokol a kliens (a böngésző) és a szerver (az azon tárolt weboldal tatrtalma) között. Amikor megnyitsz a böngésződben egy weboldalt, akkor gyakorlatilag egy http kérést küldessz a szerver felé, a szerver pedig a weboldallal válaszol. A HTTPS titkosítás használatával biztonságos kommunikációt tesz lehetővé a böngésződ és a biztonságos kapcsolattal rendelkező url-ek között. A biztonságos csatorna létrehozásához olyan nem biztonságos hálózaton mint az internet, a titkosításhoz a Transport Layer Security (TLS) vagy a Secure Sockets Layer (SSL) protokolok egyikét használják. Az ilyen hitelesítést és adatvédelmet biztosító tausítvánnyal rendelkező biztonságos weboldalak https előtaggal rendelkeznek.
Miért és hogyan használjuk?
A https előtaggal rendelkező webhelyek tehát titkosított adatátvitelt biztosítanak az internetezők és a biztonságos weboldalak között. Ez nem azt jelenti, hogy egy ilyen weboldal nincs kitéve hacker támadásoknak, vagy rosszindulatú botoknak, de jelentősen megnehezíti a rosszakarók dolgát. Érdemes tehát eleve ilyen webhelyet létrehoznunk, vagy átváltanunk http-ről https-re. A legtöbb hosting szolgáltatónál ez már ingyenes (vagy eleve alapértelmezett) lehetőség, és a szolgáltató adminisztrációs felületén egy katintással beállítható. Ha a szolgáltatód biztosítja ezt a lehtőséget, azt javaslom mindenképpen élj vele. Nem csak biztonsági szempontból előnyös, hanem kresőoptimalizálási megfontolásokból is, a keresők ugyanis előbbre rangsorolják a biztonsági tanusítvánnyal ellátot webhelyeket a nem biztonságos weboldalaknál.
2. Clickjacking tiltása és a HTTPOnly cookie-k alkalmazása
Mi az a clickjacking?
A clickjacking, ahogy a nevében is szerepel, egy eltérítési módszer. A támadók stíluslapok, iframe-ek és szövegdobozok használatának trükkös kombinációjával átlátszó rétegeket hoznak létre, amik az ártatlan internetező számára láthatatlanok. Például egy átlátszó gombot vagy linket helyeznek el afölé a gomb vagy link felé, amire kattintva a felhasználó egy újabb webhelyre érkezne, ahová szándéka szerint is szeretne. De ez az ádáz trükk egy egész más webhelyre navigálja, ahol ugyanúgy meg kell adnia az e-mail címét, banki adatait egyéb személyes adatait amik az eredeti helyen az azonosítást és a belépést szolgálnák, ehelyet egy a támadó által birtokolt láthatatlan szövegdobozokba kerülnek be. A támadó ilymódon láthatja, milyen billentyűket üt le az áldozata, és könnyen ellophatja ajelszavait, banki adatait.
Hogyan védekezzünk ellene?
X-Frame options követelmények beállítása
Az X-frame options sgítségével be tudjuk állítani, hogy webhelyünkön milyen forrásból származó tartalmakat lehessen beágyazni <frame> vagy <iframe> keretekbe. A legelterjedtebb beállítás az, hogy csak saját oldalról származó tartalmakat lehessen betölteni. Ehhez az alábbi kódot kell bemásolni a témánk (wp-content -> themes -> saját témád könyvtára) functions.php állományába.
header('X-Frame-Options: SAMEORIGIN');
Viszont ha ezt a kódot használod, nem fogsz tudni pl. Youtube tartalmat vagy Google Maps térképet beágyazni. Ha szeretnél egy adott oldalról tartalmat behúzni, és minden mást kizárni, ezt a következő kóddal tudod megtenni.
header('X-Frame-Options: allow-from https://www.example.com/');
Ebben az esetben a https:// utáni részt kell behelyettesítened azzal az oldallal, amelyiknek a tartalmait be szeretnéd ágyazni a webodlaladba (pl. youtube.com).
HTTPOnly és Secure Flag beállítása a sütikhez
Ezzel a módszerrel jelezni tudod a böngésző számára, hogy az oldaladon használt sütik hozzáférhetőek biztonságos SSL csatornán keresztül, így egy biztonsági réteg kerül a session cookie-k fölé.
Ehhez a wp-config.php fájlt kell megkeresned (a WordPress főkönyvtárában), és beillesztened az alábbi sorokat.
@ini_set('session.cookie_httponly', true);
@ini_set('session.cookie_secure', true);
@ini_set('session.use_only_cookies', true);
3. Az xml-rpc tiltása
Mi az xml-rpc?
Az XML-RPC egy XML formátumú távoli meghívási protokoll, amelynek segítségével a WordPress-nek távolról tudunk adatokat és utasításokat átadni illetve onnan fogadni, xml formátumban. Öszességében arra való hogy egy külső API-n keresztül tudjunk kommunikálni wordpress weboldalunkkal. A raktárkezelő szoftverünk pl. így kommunikál a WooCommerce-szel. Viszont mivel távoli utasításokra alkalmas, előszeretettel használják a támadó robotok. Ennek következményeként a weboldalunk akár lényeges mértékben is lassulhat, hiszen a robotok lekötik a szerver teljesítményét.
Hogyan védekezzünk?
Ha nem használunk Jetpack bővítményt vagy olyan külső alkalmazást, amely kommunikál a wordpressel, ez a funkció teljesen fölösleges, így nemhogy csak kikapcsolható, de érdemes is kikapcsolni.
.htacces fájl segítségével
Keressük meg a woocommerce weboldalunk gyökérkönyvtárában levő .htacces nevű fájl. Töltsük le, vagy szerkesszük közvetlenül aszerveren. A fájl elejére illesszük be az alábbi pár sort.
# Block WordPress xmlrpc.php requests
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
Fontos, hogy a kódrészlet a # BEGIN WordPress kezdetű sor elé kerüljön, mivel a .htaccess fájl a wordpress oldallal végzett módosítások során gyakorta felülíródik, de mindig csak a wordpressre vonatkozó részek. Ha tehát a # BEGIN WordPress elé vagy # END WordPress után írunk sorokat, azok nem fognak elveszni.
functions.php fájl segítségével
Ha nem szeretnél vagy nem mersz belepiszkálni a .htaccess fájlba, választhatod ezt a megoldást is. Keresd meg a használatban levő wordpress témád könyvtárát (wp-content -> themes -> témád), és azon belül a functions.php nevű fájlt. Nyisd meg egy szövegszerkesztővel, görgess a legaljára, és egy üres sorba illeszd be az alábbi kódrészletet.
/**
* Disable xmlrpc
*/
add_filter( 'xmlrpc_enabled', '__return_false' );
4. HTTP Security header alkalmazása: content shifting tiltása és X-XSS védelem
Mi az a HTTP fejléc?
A HTTP fejléc határozza meg a http tranzakció paramétereit. Információt ad a böngészőnek, hogy milyen szabályok alapján tud interakcióba lépni a weboldalunkkal. A http fejléc többnyire olyan metaadatokat tartalmaz mint pl. a karakter kódolás, cache kezelés stb., de azt is meghatározhatod vele, hogy a böngészők kizárólag HTTPS-en keresztül kommunikálhassanak az oldaladdal (HSTS), továbbá beállíthatod az X-XSS védelmet, x-frame követelményeket, és védelmet alakíthatsz ki a content shifting ellen.
Hogyan állíthatom be a HTTP fejléceket?
Ehhez .httacces fájlra lesz ismét szükséged (továbbra is a wordpress oldalad főkönyvtárában). Nyisd meg és illeszd be az alábbi sorokat legalulra.
Header set Strict-Transport-Security "max-age=31536000" env=HTTPS
Header set X-XSS-Protection "1; mode=block"
Header set X-Content-Type-Options nosniff
Header always append X-Frame-Options SAMEORIGIN
Header set Referrer-Policy: no-referrer-when-downgrade
Ha az x-frame beállítását már elvégezted a a 2. szakaszban leírtak szerint, a negyedik sort érdemes kihagyni.
Ezen az oldalon ellenőrizheted, hogy sikerült-e megfelelően beállítanod a http fejléceket:
https://securityheaders.com/
5. Brute force támadás elleni védelem
Mi az a brute force támadás?
A “nyers erő” támadás lényege a teljes kipróbálás, azaz minden lehetséges jelszó és kulcs kipróbálása a titkosító rendszerekkel szemben. Egy sikeres támadás hozzáférést adhat a támadónak a WordPress oldalad admin felületéhez, ezért minden erővel nehezíteni kell az ilyen támadások sikerét.
Milyen módszerekkel védekezhetünk elenne?
Admin könyvtár védelme
A wp-admin könyvtárad “gyárilag” védett a WordPress telepítése során megadott felhasználónév-jelszó megadásával, de ez önmagában kevés lehet. Érdemes magát az admin felületet tartalmazó wp-admin könyvtárat levédeni. Könyvtárvédelemre a legtöbb szolgáltató adminisztrációs felületén (pl. cPanel) van lehetőség, de ha ilyet nem találsz, akkor a .htaccess fájl segítségével is megoldhatod a dolgot.
A .htaccess fájlba helyezzük el a követkző kódot.
# Protect Drectory
AuthName "Dialog prompt"
AuthType Basic
AuthUserFile /utvonal/weboldaladhoz/wp-admin/.htpasswd
Require valid-user
Az AuthUserfile kezdetű sornál meg kell adnod a weboldaladat tartalmazó könyvtár elérési utvonalát a szervered gyökérkönyvtárából kiindulva. A wp-admin könyvtárba pedig fel kell másolnod egy .htpasswd fájlt, ami a felhasználónevedet és a jelszavadat tartalmazza kódolt formában. Az alábbi linken a kívánt felhasználónév és jelszó megadásávál generálhatsz egy .htpasswd fájlt, amit a kívánt helyre tudsz másolni.
https://www.web2generators.com/apache-tools/htpasswd-generator
Admin url módosítása
A könyvtárvédelmen felül biztonságot adhat az admin felületednek, ha az alapértelmezett wp-admin elérést megváltoztatod valami tetszőlegesre – ami lehetőleg nem tartalmazza az admin vagy a belépés szót. Ezt legegyszerűbben egy bővítménnyel tudod elérni. Töltsd le, és aktiváld a Change wp-admin bővítményt. Ezután a wp-adminon a Beállítások -> Közvetlen hivatkozások menüpont alatt megjelenik két új szövegmező, amiből az első az érdekes, ahol is megadhatod, hogy mi legyen az új url végződés (admin slug) a wp-admin helyett. Nyugott lehetsz, a plugin nem fogja megváltoztatni a könyvtáradat. Annyi történik, hogy a wp-admin ezután nem lesz hagyományo módon elérhető. Az admin felületet a megadott url alatt tudod elérni, és itt tudsz bejelentkezni. A bővítmény ezután átirányít a hagyományos wp-admin helyre.
Könyvtár böngészés kikapcsolása
A rosszindulatú robotok vagy a hekkerek előszeretettel böngészik át egy weboldal teljes könyvtárstruktúráját olyan féjlokat keresve, amelyek sebezhetőek vagy biztonság szempontjából ismert gyenge pontjaik vannak. Egy a .htaccess fájlban megadható beállítással letilthatjuk a könyvtár böngészést.
Options -Indexes
Erős jelszavak használata
Mind az admin oldaladon, mind a felhasználói regisztrációnál ragszkodj az erős jelszóhoz. Az admin felületen ez beállítható, de a legtöbb olyan bővítménynél is, amely felhasználói profillal kapcsolatos (pl. Ultimate members), vagy felhasználói profilt és bejelentkezést igényel (pl. Woocommerce). De léteznek olyan webvédelmi bővítmények, amelyeknél ez a funkció egy kattintással bekapcsolható. Erről a fejezet végén részletesebben olvashatsz.
Hibaüzenetek és egyéb információk elrejtése
A WordPress által megjelenített hibaüzenetek nem csak a fejlesztő, de a hekkerek számára is információt adnak. Nem kizárt, hogy egy kiöregedett és használaton kívül helyezett script használata hibaüzenetet keletkeztet egy oldalon. Ebből az is látható, hogy melyik fájl melyik sorában van a hiba és ezt a hekker adott esetben kihasználhatja ellenünk. Inkább rejtsük el a hibaüzeneteket, és csak időszakos hibakereséskor vagy új fejlesztések során kapcsoljuk vissza.
A hibaüzenetek elrejtésére a wp-config.php fájlban van lehetőségünk az alábbi sorok beillesztésével.
ini_set('display_errors','Off');
ini_set('error_reporting', E_ALL );
define('WP_DEBUG', false);
define('WP_DEBUG_DISPLAY', false);
A WordPress minden újabb verziója hivatott az előző verziók biztonsági réseinek betömésére, de minden korábbi verziónak megvannak a maguk ismert biztonsági hibáik. Ezekkel a hibákkal a hekker is tisztában van, így a weboldalunk WordPress verziószámából már könnyen kikövetkeztetheti, hogy mik az oldalunk sebezhetőségei ahol bepróbálkozhat. A verziószámot persze így is úgy is kiderírheti, ha nagyon akarja, de legalább ne játszuk önként a kezére. Rejtsük el a WordPress verziószámot! Az alábbi kóddal a verziószám kiszedhető az oldal forráskódjából. A functions.php-be illeszd be az alábbi sorokat!
//Hide Wordpress version from everywhere
function dartcreations_remove_version() {
return '';
} add_filter('the_generator', 'dartcreations_remove_version');
Webhely védelmi bővítmény / tűzfal használata
Egy brute force védelemmel ellátott biztonsági bővítmény telepítésével a legtöbb fentebb említett védekezési mód egy kattintásra aktiválahtó. Előszerettel javaslom a Wordfence bővítmény használatát. A tűzfalon kívül a következő nyers erővel szembeni támadások ellen alkalmazható funkciókkal bír. Bekapcsolható rajta a két faktoros azonosítás. A felhasználóid a belépési adataik megadása után egy megerősítő e-mailt kapnak a belépési linkkel. Persze vannak olyan felahsználói regisztrációra és beléptetésre kialakított bővítmények (pl. Ultimate members), amelyek szintén fel vannak vértezve ezzel a funkcióval. Ezen kívül elrejthetőek a belépési hibákkal kapcsolatos hibaüzenetek. Ha a belépés során a felhasználód rossz azonosítót vagy jelszót ad meg, a wordpress erre felhívja figyelmet. Ha a hibaüzenet arról értesít, hogy rossz jelszót adtál meg, akkor próbálkozásra programozott netbot számára is jelzés, hogy jó felhasználónévvel próbálkozik és már csak a jelszót kell kitalálnia. Ez a funkció viszont általános “hibás felhasználónév vagy jelszó” jellegű üzenettel váltja fel az eredeti hibaüziket, amiből már nem lehet következtetni arra, hogy melyik a volt a hibás. A Wordfence-ben továbbá meghatározható a hibás belépési próbálkozások száma, melyek elértével letiltja felhasználót. De inkább ez miatt kelljen magyarázkodnod, mintsem azért hogy iletéktelen személy szólt hozzá valamihez a nevében vagy adott le rendelést.
Hát összegészében ennyi, amire érdemes odafigyelned. Ha úgy gondolod, hogy hasznos volt az itt elérhető információ a WordPress weboldalad védelmét illetően, oszd meg ezt a bejegyzést, hátha másnak is segíthet. Ha pedig nem szeretnél lemaradni hasonlóan hasznos WordPress témájú tartalmakról, kövess be a Facebook oldalamon! Sikeres webvédelmet, sok biztonságban tudott látogatót kívánok!