Úroveň zabezpečení aplikace bych rozdělil do tří úrovní:
- Aplikace zabezpečená není, neošetřuje uživatelské vstupy ani své výstupy.
- Aplikace se o zabezpečení snaží, ale takovým způsobem, že na ně lze zapomenout.
- Aplikace se o zabezpečení stará sama, prakticky se nedá udělat chyba.
Jak se tyto úrovně projevují v jednotlivých oblastech?
XSS
Druhou úroveň představuje ruční ošetřování pomocí htmlspecialchars. Třetí úroveň zdánlivě reprezentuje automatické ošetřování v šablonách, např. v Nette Latte. Proč píšu zdánlivě? Problém je v tom, že ošetření se dá obvykle snadno zakázat, např. v Latte pomocí {!$var}
. Viděl jsem šablony plné vykřičníků i na místech, kde být neměly. Autor to vysvětlil tak, že psaní {$var}
někde způsobovalo problémy, které po přidání vykřičníku zmizely, tak je začal psát všude.
<?php $safeHtml = $texy->process($content_texy); $content = Html::el()->setHtml($safeHtml); // v šabloně pak můžeme použít {$content} ?>
Ideální by bylo, když by už samotná metoda process()
vracela instanci Html
.