Pokud jste byli na 2. WordPress konferenci v Hluboké, tak se tam celkem dost probírala bezpečnost. A to jen v první (Základní zabezpečení WordPressu) a páté přednášce (Nejčastější problémy s WordPress, které řeší zákaznická podpora). Na obě přednášky si určitě najděte čas a koukněte na ně. Popřípadě jako já je můžete jen poslouchat při práci.
Bezpečnost není třeba brát na lehkou váhu. Jedním z nejčastějších problémů je nahrát si na web sám nebezpečný kód. Tím samozřejmě není myšleno jen kód, kde jsou nějaká zadní vrátka, ale také skripty, které jsou neošetřené proti případnému útočníkovi. Existuje nespočet vývojářů open source, kteří to myslí dobře, mají super nápad, ale chybí jim zkušenosti. Snadno pak mohou opomenout nějaký bezpečnostní test.
V roce 2013 bylo detekováno 73,2 % instalací WordPress, které jsou náchylné na případný útok právě kvůli nedostatečnému zabezpečení šablon, pluginů anebo případně nebyla u nich provedená důležitá bezpečnostní aktualizace. Samozřejmě neznamená to hned, že mohou být případným útočníkem zasaženy. Spousta WordPress instalací používá bezpečnostní opatření, za kterými často stojí provozovatel jejich sdíleného webhostingu. Moderním trendem je totiž zákazníkům umožnit instalaci na jedno kliknutí. Programátoři těchto instalátorů mohou ovlivnit významně ovlivnit některé bezpečnostní prvky samotné instalace. Například jsou to práva k práci se soubory, nahrazení implicitních hodnot pro název administrátora (admin) a prefixů tabulek. Tyto maličkosti dokáží případným automatickým útokům prováděných roboty velice znesnadnit práci.
A jaké jsou nejčastější chyby v pluginech, popřípadě šablonách?
SQL Injection
SQL Injection je vložení škodlivého SQL kódu prostřednictvím neošetřeného formuláře. Takovýto formulář může dovolit například změnit hesla v databázi anebo jí vymazat. PHP má proti SQL injection několik silných zbraní. Mezi ně patří například funkce mysqli_real_escape_string (dříve mysql_real_escape_string). Samozřejmě na bezpečnost je ideálně dbát pomocí testování druhu vložených dat (například is_numeric() atd.).
Cross-Site Scripting (XSS)
Tento druh útoků se celkem špatně vysvětluje (necháme si to na samostatný článek). V podstatě jde o útok, kdy můžeme prostřednictvím nezabezpečeného formuláře vložit celý kus kódu. Například iframce anebo javascript. Jistě si dokážete představit kolik problémů to může napáchat. Mimochodem s tímto problémem se setkal i Twitter. XSS je obecně postrachem vývojářů a to i těch zkušených.
Chybějící Level Access Control
Tohle se týká webů, kde je možné se registrovat. V podstatě jde o to, že některé funkce jsou přístupné pouze administrátorovi a běžný uživatel se k nim nedostane. Pokud ale útočník zná přesnou adresu skriptu, který má na starosti obsluhovat administrátora a dokáže jej zavolat může vykonávat daný úkon jako administrátor. Jedná se o velice specifickou chybu, která ale může vést například k XSS anebo SQL Injection, protože u administrátora se nepočítá že bude provádět takové věci.
CSRF (Cross-Site Request Forgery)
Tohle se také bude trochu obtížněji vysvětlovat 🙂 Dejme tomu, že potřebujete provést nějaký úkon, který může jen administrátor. Znáte URL skriptu, který to může udělat a zároveň i co mu máte poslat za příkazy. Problém je v tom, že na vykonání potřebujete práva administrátora. Pokud dokážete propašovat na web například obrázek ve formě URL skriptu s parametry tak máte vyhráno.
Příklad:
<img src=“http://blog.tld/nezabezpeceni-plugin/uprava-prav.php?id=2&nastavprava=1″ width=“0″ height=“0″ />
Zavoláme tak skript, který ID s číslem 2 (útočník), upraví práva na 1 (administrátor). Pokud tento skript zavolá nalogovaný administrátor tak je tu velký problém.
Jak s tím bojovat
To je ukázka základních zranitelností. Samozřejmě je jich více, jen se tolik nepoužívají, protože mají malou účinnost či jejich spuštění vyžaduje specifické nastavení serveru.
Samozřejmě není ve vašich silách si procházet všechno co si nainstalujete do vašeho redakčního systému, i když by jste měli. Takže se musíte spolehnout na třetí stranu. Třeba tu, která vám poskytla redakční systém. Rozšíření a šablony na jejich stránkách totiž někdo kontroluje. Většinou je k tomu vybrán tým lidí, kteří s tím mají bohaté zkušenosti. Takže pokud chcete využívat nějaké rozšíření určitě jej stahujte pouze z původních stránek. To samozřejmě platí i o šablonách. Cokoliv mimo může být totiž nebezpečné (a často i je).