Joomla! je ve výchozím stavu dobře zabezpečený redakční systém. Bezpečnost webu ale nezávisí jen na samotném jádře. Rozhoduje také kvalita hostingu, aktuálnost rozšíření, nastavení uživatelských účtů, oprávnění souborů, způsob zálohování a pravidelná kontrola provozu.
V tomto článku najdete 20 doporučených nastavení pro zabezpečení Joomla!, která pomáhají snížit riziko napadení, zneužití administrátorského účtu, zavlečení škodlivého kódu nebo dlouhodobě neodhaleného problému.
Některé kroky zvládnete přímo v administraci Joomla!, jiné vyžadují přístup k hostingu, serveru nebo souborům webu. Před každou významnější změnou proto vytvořte úplnou zálohu a úpravy nejprve otestujte na kopii webu.
Bezpečnost Joomla! není jedno tlačítko ani jeden plugin
Bezpečný web nevznikne pouze instalací firewallu nebo změnou adresy administrace. Útočníci často využívají kombinaci několika slabin: zastaralé rozšíření, slabé heslo, nepoužívaný účet správce, veřejně dostupnou zálohu nebo špatně nastavená oprávnění souborů.
Cílem proto není vytvořit web, který nelze za žádných okolností napadnout. Praktickým cílem je:
- snížit pravděpodobnost úspěšného útoku,
- omezit rozsah škod při napadení,
- co nejrychleji problém odhalit,
- mít připravenou bezpečnou obnovu webu,
- znát osoby a účty, které mohou web měnit.
1. Aktualizujte jádro Joomla!
Bezpečnostní aktualizace Joomla! opravují známé chyby v jádře systému. Jakmile je zranitelnost zveřejněna, mohou útočníci začít automaticky vyhledávat weby, které stále používají starší verzi.
Dostupnost aktualizací kontrolujte v administraci přes Systém → Aktualizace → Joomla. U spravovaných webů je vhodné kontrolu provádět pravidelně a současně sledovat bezpečnostní oznámení projektu Joomla!.
Vytvořte zálohu
Před aktualizací zazálohujte soubory i databázi.
Ověřte kompatibilitu
Zkontrolujte šablonu, rozšíření a požadovanou verzi PHP.
Proveďte aktualizaci
U důležitého webu aktualizujte nejprve jeho testovací kopii.
Otestujte web
Zkontrolujte administraci, formuláře, přihlášení, e-shop a mobilní zobrazení.
2. Aktualizujte všechna rozšíření a šablony
Zabezpečené jádro Joomla! nestačí, pokud web používá zastaralý plugin, komponentu, modul nebo šablonu. Chyba v rozšíření může umožnit nahrání souboru, obejití oprávnění, SQL injection, XSS nebo jiné nežádoucí chování.
Aktualizace kontrolujte přes Systém → Aktualizace → Rozšíření. U placených rozšíření ověřte, zda je správně vložen aktualizační nebo licenční klíč. Bez něj se nová verze nemusí v administraci vůbec nabídnout.
- Kontrolujte aktualizace všech komponent, modulů, pluginů a šablon.
- Sledujte oznámení výrobců rozšíření.
- Ověřte platnost licencí a aktualizačních klíčů.
- Nepoužívejte rozšíření stažená z neověřených zdrojů.
- Před větší aktualizací prostudujte seznam změn.
3. Odstraňte nepoužívaná rozšíření
Vypnutý plugin není totéž jako odinstalovaný plugin. Jeho soubory mohou stále zůstávat na serveru a v některých případech mohou být dostupné přímo nebo obsahovat zranitelný kód.
Pravidelně proto projděte seznam rozšíření a odstraňte vše, co web skutečně nepotřebuje. Týká se to také starých šablon, instalačních balíčků, testovacích komponent a nástrojů použitých pouze při migraci.
Nevhodný postup
Nepoužívané rozšíření pouze vypnout a několik let jej ponechat na serveru.
Doporučený postup
Ověřit, že není používáno, vytvořit zálohu a rozšíření standardně odinstalovat.
4. Používejte podporovanou verzi PHP
Bezpečnost webu závisí také na verzi PHP a serverových knihovnách. Nepodporovaná verze PHP již nemusí dostávat bezpečnostní opravy, i když na ní samotná Joomla! ještě zdánlivě funguje.
Verzi PHP zjistíte v administraci přes Systém → Systémové informace nebo v nastavení hostingu. Před přepnutím na novější PHP vždy ověřte kompatibilitu šablony a všech rozšíření.
5. Nastavte automatické zálohování
Záloha není ochrana před útokem, ale je zásadní pro obnovu webu po napadení, chybné aktualizaci, poškození databáze nebo lidské chybě. Populárním nástrojem pro zálohování webů na Joomla! je Akeeba Backup. V tomto článku si ukážeme, jak zálohovat web s pomocí komponenty Akeeba Backup.
Záloha musí obsahovat minimálně:
- všechny soubory webu,
- databázi Joomla!,
- soubor configuration.php,
- uživatelská média a dokumenty,
- případné externě uložené soubory,
- informaci o použité verzi PHP a serverovém prostředí.
Alespoň jedna kopie zálohy musí být uložena mimo hosting, na kterém běží web. Pokud útočník získá přístup k serveru, může smazat nebo pozměnit i lokální zálohy.
6. Pravidelně testujte obnovu zálohy
Záloha, kterou nelze obnovit, má velmi malou hodnotu. Nestačí tedy kontrolovat, že se každý den vytvořil soubor. Je potřeba ověřit, že archiv není poškozený, obsahuje databázi a lze z něj skutečně spustit funkční kopii webu.
Test obnovy provádějte na oddělené doméně, subdoméně nebo lokálním prostředí. Obnovený web nesmí být veřejně indexovatelný a neměl by rozesílat skutečné e-maily zákazníkům.
7. Používejte jedinečná a silná hesla
Heslo do Joomla! nesmí být stejné jako heslo k e-mailu, FTP, databázi, hostingu nebo jiným webům. Při úniku hesla z jiné služby by útočník mohl stejnou kombinaci automaticky vyzkoušet také v administraci Joomla!.
- Používejte dlouhá a jedinečná hesla.
- Hesla ukládejte v důvěryhodném správci hesel.
- Nesdílejte jeden účet mezi více pracovníky.
- Neposílejte hesla v běžném e-mailu.
- Po ukončení spolupráce přístup okamžitě zrušte.
- Změňte heslo, pokud mohlo dojít k jeho prozrazení.
8. Zapněte vícefaktorové ověření
Vícefaktorové ověření neboli MFA vyžaduje při přihlášení další ověřovací krok. Samotná znalost hesla proto útočníkovi nemusí stačit k přístupu do účtu.
Joomla! nabízí vícefaktorové ověření přímo v jádře. Správci mohou používat například ověřovací aplikaci, bezpečnostní klíč nebo jinou dostupnou metodu podle konfigurace webu.
MFA zapněte minimálně pro:
- Super Users,
- administrátory webu,
- správce uživatelů,
- osoby instalující rozšíření,
- účty s přístupem k objednávkám nebo osobním údajům.
9. Nepoužívejte snadno odhadnutelný účet správce
Uživatelské jméno jako admin, administrator,
název domény nebo veřejně známý e-mail útočník snadno odhadne. Tím mu zbývá
zjistit pouze heslo.
Administrátorské účty by měly mít jedinečná uživatelská jména a každý správce by měl používat vlastní účet. Díky tomu lze v logu dohledat, kdo konkrétní změnu provedl.
10. Nastavte uživatelům minimální potřebná oprávnění
Ne každý, kdo upravuje články, potřebuje oprávnění instalovat rozšíření, měnit globální konfiguraci nebo spravovat uživatele. Joomla! obsahuje propracovaný systém skupin, úrovní přístupu a oprávnění ACL.
Uživatelům přidělujte pouze práva nutná pro jejich práci. Redaktor může například upravovat obsah, aniž by měl přístup ke komponentám, pluginům, šablonám nebo systémové konfiguraci.
Seznam účtů
Zkontrolujte všechny aktivní uživatele a jejich skupiny.
Rozsah práce
Určete, co každý uživatel skutečně potřebuje dělat.
Minimální práva
Odeberte zbytečná oprávnění a přístup k citlivým částem.
Pravidelná revize
Neaktivní a bývalé uživatele blokujte nebo odstraňte.
11. Vynucujte HTTPS na celém webu
HTTPS šifruje komunikaci mezi prohlížečem a serverem. Chrání přihlašovací údaje, formulářová data, cookies i administrátorské relace před odposlechem při přenosu.
Po instalaci platného SSL certifikátu nastavte v Joomla! vynucení HTTPS a současně zajistěte přesměrování všech HTTP adres na HTTPS na úrovni serveru. Zkontrolujte také, že obrázky, skripty, fonty a další zdroje nejsou načítány přes nezabezpečené HTTP.
- SSL certifikát je platný a automaticky se obnovuje.
- HTTP adresy se přesměrují na HTTPS.
- Administrace funguje pouze přes HTTPS.
- Web neobsahuje mixed content.
- HTTPS používají také formuláře, API a platební brány.
12. Zkraťte životnost administrátorské relace
Dlouhá životnost relace znamená, že přihlášení může zůstat aktivní i na opuštěném nebo sdíleném počítači. V globální konfiguraci Joomla! proto nastavte rozumnou dobu nečinnosti, po které bude uživatel automaticky odhlášen.
Konkrétní hodnota závisí na způsobu práce. Příliš krátká relace může komplikovat editaci dlouhých článků, příliš dlouhá ale zvyšuje riziko zneužití přihlášeného účtu.
13. Vypněte ladění a zobrazování chyb na ostrém webu
Režim ladění a podrobné chybové hlášky jsou užitečné při vývoji, ale na veřejném webu mohou prozradit cesty k souborům, názvy tříd, databázové dotazy, používané komponenty nebo části serverové konfigurace.
V ostrém provozu nastavte:
- Ladění systému: vypnuto,
- Ladění jazyka: vypnuto,
- Hlášení chyb: systémové nebo omezené nastavení,
- zápis podrobností do neveřejného serverového logu,
- uživatelsky srozumitelnou chybovou stránku.
14. Zkontrolujte oprávnění souborů a složek
Nevhodně nastavená oprávnění mohou umožnit jiným uživatelům serveru nebo
zranitelnému procesu zapisovat do souborů webu. Joomla! ve své bezpečnostní
dokumentaci upozorňuje, že web by neměl vyžadovat oprávnění 777.
Na běžném linuxovém hostingu se pro Joomla! weby používá:
- 755 pro složky,
- 644 pro soubory,
- přísnější oprávnění pro citlivé konfigurační soubory, pokud to server umožňuje.
15. Chraňte soubor configuration.php
Soubor configuration.php obsahuje důležité nastavení webu,
včetně připojení k databázi, cest k logům a dočasným souborům. Musí být
čitelný pro Joomla!, ale nesmí být veřejně dostupný ke stažení ani zbytečně
zapisovatelný.
- Zkontrolujte oprávnění souboru. Nastavte mu oprávnění 444
- Nenechávejte na serveru jeho kopie typu configuration-old.php.
- Neukládejte ho do veřejného repozitáře.
- Neposílejte jej nešifrovaným e-mailem.
- Po podezření na únik změňte heslo databáze a další přístupy.
16. Omezte nahrávání souborů
Možnost nahrát soubor patří mezi citlivé funkce každého webu. Zkontrolujte povolené přípony, MIME typy, maximální velikost souboru i skupiny uživatelů, které mohou soubory nahrávat.
U formulářů a rozšíření třetích stran povolte pouze formáty, které skutečně potřebujete. Není-li důvod přijímat skripty, archivy nebo spustitelné soubory, nepovolujte je.
- Povolte jen nezbytné přípony.
- Ověřujte příponu i skutečný MIME typ.
- Nahrané soubory přejmenovávejte.
- Ukládejte citlivé dokumenty mimo veřejný adresář.
- Zakazujte spouštění skriptů v upload složkách.
- Kontrolujte oprávnění uživatelů k nahrávání.
17. Nastavte bezpečnostní HTTP hlavičky
Bezpečnostní HTTP hlavičky předávají prohlížeči pravidla, jak má s webem zacházet. Mohou omezit vložení stránky do cizího iframe, MIME sniffing, únik refereru, používání vybraných funkcí prohlížeče nebo načítání nedůvěryhodných skriptů.
Mezi důležité hlavičky patří:
- Strict-Transport-Security pro vynucení HTTPS v prohlížeči,
- Content-Security-Policy pro omezení zdrojů obsahu,
- X-Content-Type-Options: nosniff,
- Referrer-Policy,
- Permissions-Policy,
- X-Frame-Options nebo odpovídající pravidlo CSP.
Joomla! obsahuje systémový plugin pro správu HTTP hlaviček. Content Security Policy však nezapínejte bez testování. Příliš přísná pravidla mohou zablokovat editor, mapy, formuláře, platební bránu, externí fonty nebo JavaScript šablony.
18. Omezte přístup do administrace
Adresář /administrator je standardní součást Joomla! a jeho
samotná znalost nepředstavuje bezpečnostní chybu. Přesto lze přístup
k administraci dále omezit a snížit počet automatických pokusů o přihlášení.
Možné způsoby ochrany:
- vícefaktorové ověření,
- omezení počtu neúspěšných pokusů,
- dodatečné HTTP heslo před administrací,
- omezení podle IP adresy, pokud je provozní situace stabilní,
- webový aplikační firewall,
- upozornění na opakovaná neúspěšná přihlášení.
19. Zapněte logování a sledujte změny
Bez logů se obtížně zjišťuje, kdy problém začal, který účet změnu provedl a jaké URL útočník používal. Joomla! nabízí protokol akcí uživatelů, další informace poskytují serverové access a error logy.
Sledujte zejména:
- přihlášení a neúspěšné pokusy o přihlášení,
- vytváření nových uživatelů,
- změny skupin a oprávnění,
- instalace a aktualizace rozšíření,
- změny globální konfigurace,
- neobvyklé POST požadavky,
- přístupy k neznámým PHP souborům,
- opakované chyby 403, 404 a 500.
20. Nastavte pravidelný bezpečnostní monitoring
Bezpečnostní kontrola jednou při spuštění webu nestačí. Monitoring by měl průběžně sledovat dostupnost webu, aktualizace, změny souborů, stav SSL certifikátu, výskyt škodlivého kódu a případné zařazení domény na blacklist.
U důležitých webů doporučujeme kombinovat automatickou kontrolu s pravidelnou ruční revizí administrace, uživatelských účtů, rozšíření a serverových logů.
Denně
Kontrola dostupnosti, záloh a kritických bezpečnostních upozornění.
Týdně
Kontrola aktualizací Joomla!, rozšíření a neobvyklých chyb.
Měsíčně
Revize uživatelů, oprávnění, logů a nepoužívaných rozšíření.
Pravidelně
Test obnovy zálohy a bezpečnostní audit celé instalace.
V jakém pořadí Joomla! zabezpečit?
Pokud začínáte se starším nebo dlouhodobě neudržovaným webem, neprovádějte všechny změny bez přípravy. Nejprve zajistěte možnost návratu k původnímu stavu.
1. Záloha
Vytvořte úplnou kopii souborů a databáze mimo server.
2. Inventura
Sepište Joomla!, PHP, šablonu, rozšíření, uživatele a externí napojení.
3. Testovací kopie
Na kopii vyzkoušejte aktualizace a změnu PHP.
4. Aktualizace
Aktualizujte jádro, rozšíření, šablony a serverové prostředí.
5. Účty a přístupy
Změňte riziková hesla, zapněte MFA a odeberte nepotřebné účty.
6. Serverová ochrana
Zkontrolujte HTTPS, oprávnění, hlavičky, uploady a administraci.
7. Monitoring
Nastavte pravidelnou kontrolu aktualizací, logů, záloh a změn souborů.
Kontrolní seznam zabezpečení Joomla!
- Joomla! používá podporovanou a aktuální verzi.
- Všechna rozšíření a šablony jsou aktualizované.
- Nepoužívaná rozšíření byla odinstalována.
- Server používá podporovanou verzi PHP.
- Automatické zálohy se ukládají mimo webový server.
- Obnova zálohy byla úspěšně otestována.
- Každý správce má vlastní účet.
- Administrátorské účty používají MFA.
- Uživatelská oprávnění odpovídají skutečné práci uživatelů.
- Neaktivní a bývalé účty jsou zablokované nebo odstraněné.
- Celý web včetně administrace používá HTTPS.
- SSL certifikát se automaticky obnovuje.
- Životnost relace je nastavena přiměřeně.
- Na ostrém webu je vypnuté ladění.
- Web veřejně nezobrazuje podrobné PHP chyby.
- Složky nepoužívají oprávnění 777.
- Soubor configuration.php není zbytečně zapisovatelný.
- Na serveru nejsou veřejné kopie konfigurace a zálohy.
- Nahrávání souborů je omezené na potřebné formáty.
- V upload složkách nelze spouštět skripty.
- Jsou nastavené bezpečnostní HTTP hlavičky.
- Content Security Policy byla před ostrým nasazením otestována.
- Přístup do administrace je dodatečně chráněný.
- Joomla! zaznamenává důležité uživatelské akce.
- Jsou dostupné serverové access a error logy.
- Je nastavený monitoring dostupnosti a bezpečnostních změn.
- Existuje postup pro případ napadení webu.
Časté dotazy k zabezpečení Joomla!
Je Joomla! bezpečný redakční systém?
Ano, Joomla! je aktivně vyvíjený systém s pravidelnými bezpečnostními aktualizacemi. Bezpečnost konkrétního webu ale závisí také na rozšířeních, hostingu, PHP, uživatelských účtech a pravidelné správě.
Stačí pravidelně aktualizovat pouze jádro Joomla!?
Nestačí. Aktualizovat je nutné také komponenty, moduly, pluginy, šablony, PHP a podle typu serveru i další systémový software.
Jak často mám kontrolovat aktualizace?
U běžného firemního webu alespoň jednou týdně. Kritická bezpečnostní upozornění je vhodné sledovat průběžně a opravy instalovat bez zbytečného odkladu.
Chrání změna adresy administrace Joomla! před napadením?
Sama o sobě ne. Může omezit část automatických pokusů, ale nenahrazuje aktualizace, silné heslo, MFA, správná oprávnění ani kontrolu zranitelných rozšíření.
Je bezpečné nastavit složky na oprávnění 777?
Obvykle ne. Joomla! ve své bezpečnostní dokumentaci nedoporučuje provoz, který vyžaduje oprávnění 777. Na běžném linuxovém hostingu se často používá 755 pro složky a 644 pro soubory, konkrétní nastavení však závisí na serveru.
Je vícefaktorové ověření součástí Joomla!?
Ano. Moderní verze Joomla! obsahují systém vícefaktorového ověření, který umožňuje přidat k heslu další metodu ověření.
Stačí mít zálohu na stejném hostingu?
Nestačí. Při napadení, poruše serveru nebo zrušení hostingu můžete přijít současně o web i lokální zálohy. Alespoň jedna kopie musí být uložená mimo produkční server.
Jak poznám, že byla Joomla! napadena?
Mezi možné projevy patří neznámé soubory, noví administrátoři, přesměrování, spam, změny obsahu, vysoké zatížení, chyby serveru nebo varování prohlížeče. Napadení ale může zůstat dlouho bez viditelných příznaků.
Odstraní aktualizace již vložený škodlivý kód?
Ne. Aktualizace opraví zranitelnost, ale sama obvykle neodstraní backdoor, škodlivého uživatele ani změněné databázové záznamy. Napadený web je nutné odborně vyčistit a změnit všechny související přístupy.
Potřebuji pro Joomla! bezpečnostní plugin?
Bezpečnostní rozšíření může pomoci s firewallem, blokováním útoků, monitoringem nebo ochranou administrace. Nenahrazuje však aktualizace, zálohy, bezpečný hosting a správnou správu účtů.
Co mám udělat jako první u dlouhodobě neudržovaného webu?
Nejprve vytvořte úplnou zálohu a inventuru systému. Potom připravte testovací kopii, na které ověříte aktualizaci Joomla!, rozšíření, šablony a PHP.
Jak často testovat obnovu zálohy?
Interval závisí na důležitosti a četnosti změn webu. U e-shopu nebo často aktualizovaného webu je vhodné testovat obnovu častěji než u jednoduché statické prezentace.
Shrnutí: bezpečná Joomla! potřebuje pravidelnou správu
Základem bezpečnosti Joomla! jsou včasné aktualizace jádra, rozšíření, šablony a PHP. Stejně důležitá jsou jedinečná hesla, vícefaktorové ověření, minimální uživatelská oprávnění a odstranění nepoužívaných účtů a doplňků.
Serverovou ochranu doplňuje HTTPS, správné nastavení oprávnění souborů, ochrana configuration.php, omezení uploadů a bezpečnostní HTTP hlavičky. Ani dobře nastavený web ale nesmí zůstat bez kontroly.
Pravidelné zálohy, test obnovy, monitoring změn a kontrola logů umožní problém rychleji odhalit a výrazně zkrátit dobu potřebnou k obnovení provozu.
Použité zdroje
- Joomla! Documentation – Security Guide
- Joomla! Documentation – Security Checklist
- Joomla! Security Checklist – Joomla! Setup
- Joomla! Security Checklist – Hosting and Server Setup
- Joomla! Security and Performance FAQs
- Joomla! Multi-factor Authentication
- MDN Web Docs – Content Security Policy
- MDN Web Docs – Strict-Transport-Security
- MDN Web Docs – X-Content-Type-Options
- MDN Web Docs – Permissions-Policy