Hlavní stránka Fóra Forum pro soutěžící SOČ Obhajoby – Zlínský 42 – kraj ZL – obory 01, 18 Odpověď na téma: 42 – kraj ZL – obory 01, 18

#22390
Ondřej Budín
Host

Vážený pane Jando, vážená poroto,

dovolte mi využít možnosti tohoto fóra a připojit se k diskuzi ohledně práce „Webový systém Hvězdárny Zlín“.

S vývojem webových aplikací mám více než šestileté zkušenosti. Jedna webová aplikace je také součástí mé práce „Cesta k IPv6-only síti SŠ-COPT Kroměříž“ v podobně školního intranetu.

Už při letmém pohledu na ukázky PHP kódu v prezentaci ve videu mi bylo jasné, že něco není v „pořádku“.

Na mnoha místech totiž chybí ošetření výpisu textu pomocí funkce htmlspecialchars(), která nám se správným nastavením zajistí korektní ošetření speciálních znaků, jež se mohou objevit v databázi uživatelským vstupem, či jinou cestou.

Aplikace sice provádí nějaké ošetření před uložením dat do databáze, nicméně tato technika není doporučovaný způsob. Jednak připravíme uživatele o možnost vkládat do textu speciální znaky, což je někdy potřeba, ale hlavně tím neošetříme výpis z již kompromitované databáze. Je tak možné, aby útočník do stránky načetl svůj vlastní škodlivý kód, kterým může klidně vylákat z návštěvníků webu i např. údaje do internetového bankovnictví nebo donutit uživatele si nainstalovat do počítače malware.

Navíc, s tím souvisí další problém, kdy pan Janda předem omezil znaky, které se mohou vyskytovat v uživatelském heslu. Omezení znaků v heslu nedává vůbec smysl, je to zbytečná komplikace pro uživatele. Řada uživatelů používá aplikaci správce hesel, která hesla generuje automaticky a samozřejmě, kvůli bezpečnosti, i se speciálními znaky. Takový uživatel by měl problém se na tomto webu zaregistrovat.

Omezení znaků v heslu zavání také otázkou, co autora práce k tomuto kroku vedlo? Pokud totiž jsou hesla ihned ukládána pomocí hashovací funkce password_hash() v PHP, což je takřka jediný způsob, jak s hesly nakládat správně a bezpečně, není pro omezení znaků vůbec žádný důvod. Leda, že by se hesla v databázi ukládala v prostém textu, což by byl další bezpečnostní faul. Mimochodem, funkce password_hash() je hashovací, nikoli šifrovací, jak je uvedeno v práci SOČ. Toto je opravdu důležitý rozdíl.