Egy korábbi tudásbázis cikkünk már szólt az admin-ajax.php és a wp-cron processzorhasználatának csökkentését segítő beállításokról. Azonban a Wordpress rendszert használók további nehézségekkel találkozhatnak. Az xmlrpc.php meghívása minden felhasználót érinthet, míg a wc-ajax= hívások kezelése a WooCommerce bővítményt használók számára lehet hasznos és szükséges!
1. xmlrpc.php
Mit csinál?
Az xmlrpc célja röviden az, hogy távoli eléréssel is hozzá lehessen férni a Wordpress rendszeréhez. Például lehetőséget biztosít arra, hogy okos telefonunk segítségével posztoljunk a weboldalunkra.
Hogyan működik?
HTTP-rétegen keresztül küldi el a kéréseket és fogadja a válaszokat, melyekhez XML-kódolást használ. Az RCP maga a funkciót és a protokollt is jelenti: Remote Procedure Call (RPC), azaz Távoli Eljáráshívás.
Nem mindenkivel történik meg, de...
Az xmlrpc.php rendszeres áldozata a DoS típusú támadásoknak, így elérhetetlenségével redukálható az ilyen típusú támadások nagy része/mindegyike.
Honnan ismerhetem fel, hogy ez okozza a problémát?
- A ProcessKiller menüpontban rengeteg hívás látszik, melyhez az xmlrpc.php tartozik.
- A weboldal nagyon lelassul.
- A Nyers hozzáférési naplóban (RawAccess) a jelzett fájl hívódik meg folytonosan különböző IP-címekről.
Az xmlrpc.php problémájának megoldása:
- ki kell kapcsolni a fájl elérését manuálisan,
- vagy bővítmény segítségével kell módosítani az elérését.
xmlrpc.php probléma megoldása manuálisan - 1.1 megoldás
Az alábbi kódot szükséges elhelyezni a weboldalunk .htaccess fájljába ahhoz, hogy az xmlrpc.php ne legyen elérhető senki számára sem:
# xmlrpc TELJES tiltás
<Files xmlrpc.php>
order deny,allow
deny from all
</Files>
Ezen felül az alábbi kódot lehet elhelyezni a .htaccess fájlban a fenti helyett akkor, ha egy adott IP-n található szolgáltatásnak szükséges elérnie az xmlrpc-t:
# xmlrpc tiltás KIVÉTELEKKEL
<Files xmlrpc.php>
order deny,allow
deny from all
allow from xxx.xxx.xxx.xxx
</Files>
Az xxx.xxx.xxx.xxx azt az IP-címet jelöli, ahonnan szükséges biztosítani a fájl elérését.
xmlrpc.php probléma megoldása bővítménnyel - 1.2 megoldás
A Wordpress admin felületén a Bővítmények/Új hozzáadása menüpont alatt az alábbira kell rákeresni:
- Disable XML-RPC
A bővítmény telepítése és Bekapcsolása után az xmlrpc.php fájl elérése tiltva lesz.
Természetesen nem csak a teljes kikapcsolásra van mód, léteznek bővítmények arra is, hogy a fájl elérését részleteiben menedzselni lehessen. Ajánlott bővítmények:
- Control XML-RPC Publishing
- Stop XML-RPC Attack
2. wc-ajax(=get_refreshed_fragments)
Mit csinál?
A Wordpress-WooCommerce-es webshop kosarának tartalmát frissíti ki.
Hogyan működik?
A weboldalhoz tartozó összes betöltődés esetén (vásárlástól a fizetésig akár 5-10-15 oldal-betöltésen át) kifrissíti a kosár tartalmához tartozó egyedi adatokat (mennyiség, termék, ár, stb). Sajnos ezt az admin-ajax hívást a script elvégzi akkor is, ha nincs is érdemleges kosáradat a weboldal adott részén (jellemzően nyitóoldalak ilyenek lehetnek).
Honnan ismerhetem fel, hogy ez okozza a problémát?
A legegyszerűbben úgy lehet tetten érni ezt a hibaforrást, ha egy népszerű metrikai oldalon (pingdom, gtmetrix, stb) ellenőrzést indítunk saját weboldalunkra. Az ellenőrzés végén lehet látni egy úgynevezett „Waterfall” táblázatot, melynek áttekintésekor konkrétan látszódik az admin-ajax.php lekérés is. Az alábbi képeken látható, hogyan jelenik meg az admin-ajax.php a különböző oldalak táblázatában.

- gtmetrix.com
A wc-ajax problémájának megoldása:
A problémás script lefutását kell letiltani, módosítani. Ezt a módosítást manuálisan ajánljuk elvégezni, a könnyebb kezelhetőség végett, minden esetben a használt sablon functions.php/function.php fájljában. Természetesen azonban bővítmény is alkalmazható a cél érdekében.
A wc-ajax problémájának megoldása manuálisan – 1.1 megoldás
A nyitó oldalon érdemes letiltani a kosár frissülését. Az alábbi kódot kell elhelyezni az aktuálisan használt sablon functions.php/function.php fájljában.
add_action( 'wp_enqueue_scripts', 'dequeue_woocommerce_cart_fragments', 11);
function dequeue_woocommerce_cart_fragments() {
if (is_front_page() || is_single() ) wp_dequeue_script('wc-cart-fragments');
}
Természetesen több kód is létezik a letiltásra, több különböző oldalon is letiltható a kosár-funkció. A beállítás funkcióvesztéssel jár, de az oldal gyorsaságán növelhet, így mérlegelni szükséges használatát.
A wc-ajax problémájának megoldása bővítménnyel – 1.2 megoldás
A Wordpress admin felületén a Bővítmények/Új hozzáadása menüpont alatt az alábbira kell rákeresni:
- Disable Cart Fragments by Optimocha
A bővítmény telepítése és Bekapcsolása után nem igényel további beállítást, de fontos tudnia, hogy ez csak a főoldalra érvényes és a főoldalon innentől nem tudja majd a látogató azonnal a kosárba tenni a terméket. Amennyiben van ilyen lehetőség az oldalán, érdemes mérlegelni, hogy a kezdőoldalon kikapcsolja ezt. Amennyiben a kezdőoldalon ezt az azonnali kosárba helyezés funkciót nem szeretné kivenni, mélyebb optimalizálások lehetnek szükségesek ahhoz, hogy a betöltődési idő csökkenjen.
