Hlavní navigace

Názor k článku Testování verzí CMS: 50 000 zastaralých instalací systémů WordPress a Joomla od Filip Jirsák - Odpověď na otázku proč jsou v nich díry...

  • Článek je starý, nové názory již nelze přidávat.
  • 28. 9. 2017 12:27

    Filip Jirsák

    Odpověď na otázku proč jsou v nich díry je jednoduchá - píšou je lidé a lidé dělají chyby.
    Jenže otázka nezněla, proč jsou v nich díry, ale proč jich je tolik – mnohem více, než v jiných aplikacích.

    Podobné chyby vídám v aplikacích psaných .NET, Javě a všech možných dalších jazycích.
    Ale kdepak. V .NET nebo Java aplikaci se musíte mnohem víc snažit, abyste vyrobil třeba SQL injection, v PHP to jde skoro samo (s tím, co se běžně používá) a naopak se musíte snažit, abyste SQL injection nevyrobil.

    Těch problémů s architekturou PHP je víc, jeden z nich je například to, že aplikace jsou soubory interpretované webovým serverem, které jsou pohromadě se soubory, které webový server jenom servíruje uživatelům (statický obsah). Přičemž tohle není nějaké nedopatření, tohle je záměr, jedna z vlastností, proč PHP vůbec vzniklo. No a takový CMS potřebuje umět na server nahrávat nový obsah, který pak ten webový server poskytuje ostatním. To je samozřejmě obrovská bezpečností díra, protože to umožňuje útočníkovi nahrát na server svůj vlastní kód. Jediný způsob, jak tuhle díru zalepit, je ten, že musíte ošetřit každé místo v aplikaci, které by něco takového mohlo umožnit. To je velmi pracné a velmi obtížně se to uhlídá. V Javě nebo .NET takovou chybu vyrobíte jen velmi obtížně a musíte se dost snažit.

    Jen ostatní aplikace nejsou tak rozšířené, aby dané chyby byly tak viditelné.
    Třeba Linux (jádro) je taky celkem rozšířený, dalo by se říct, že tam, kde běží WP, běží i Linux – a pak ještě na spoustě dalších míst. A tolik stále se opakujících chyb, jako WP, opravdu Linux nemá.

    používá prostředky, které mu WP nabízí například pro ošetřování vstupů
    To je právě jeden z problémů, že potřebujete speciální prostředky na ošetřování vstupů. Ona ta beztypovost PHP a to, že se snaží si s daty vždy nějak poradit, je výhodná, když si píšete něco pro sebe, když není potřeba bezpečnost řešit. Ale jakmile to chcete zabezpečit, naopak vám to neustále přidělává práci. PHP bohužel vzniklo v době, kdy se bezpečnost neřešila a vzniklo právě proto, aby byl vývoj snadný – a obě tyhle vlastnosti si logicky podrželo do dneška.

    Profi vývojáři se pak WP vysmívají, že nemá pořádný šablonovací systém (který třeba zařídí ošetření výpisu uživatelských vstupů), že není MVC, nepoužívá composer, ..., ale kdo z nich tyto technologie před 6 lety používal?
    No, upřímně řečeno, vývojáři, kteří nepíšou v PHP, tyto technologie běžně používali mnohem dřív, než před šesti lety. Ale to je přesně to, co jsem psal na začátku – PHP svou architekturou a pojetím není pro takhle velké aplikace vhodné. Sice se tam přidávají vlastnosti, které tohle usnadňují, ale pořád tam zůstává ten základ, podvozek toho všeho, který k tomuhle určený není. Který funguje jako vylepšené SSI a který mi umožní do HTML stránky rychle přidat nějaký dynamický prvek, výpis něčeho, zpracování jednoduchého formuláře apod. V tom je PHP výborné a vlastně dodnes nedostižné. Bohužel se dnes často používá pro něco úplně jiného.

    Aby bylo jasno, to mé tvrzení, že je to problém architektury PHP, neznamenalo, že problém je v PHP – problém je v tom, kdo si PHP vybere pro aplikaci, pro kterou je nevhodné. Ale zároveň chápu, že si vývojáři WordPressu, Joomla nebo Drupalu vybrali právě PHP – aplikace pak běží téměř na jakémkoli webhostingu. java nebo .NET (nebo něco exotičtějšího) by z pohledu architektury sice byly vhodnější, ale pro provozovatele to znamená nejspíš provozovat vlastní VPS (a v tom jsou zase jiná bezpečnostní rizika).