Hodně začátečníků, kteří začínají s PHP (+MySQL) se snaží udělat vlastní scripty a dají si je na svůj web. Bohužel řada z nich si neuvědumuje, že bezpečnost některých scriptů je nulová ...
Klasický případ je Návštěvní kniha jinak nazývaná jako GuestBook či jenom gbook. Snad každý si chce na svůj web dát vlastní návštěvní knihu a být tak nezávislí na cizích službách. Celý script si můžeme rozdělit do těchto logických částí:
Většina chyb se nachází právě v druhé části, protože hodně začátečníků si myslí, že data stačí jenom někam uložit a tím jejich práce končí.
Buhužel s weby, které mají povolené HTML tagy se setkávám čím dál častěji. Do formuláře (konkrétně TEXTAREA) stačí napsat libovolný tag a ejhle, on funguje. Připadá mi to jako dost brutální chyba, protože stačí napsat:
<IMG src="nějaká adresa">
<IFRAME src="http://libovolná adresa">
Možnosti jsou prakticky neomezené. Pokud je stránka dělaná pomocí tabulek, stačí přihodit pár tagů <TR> <TD> <TABLE> či </TABLE> a udělá to pěknou paseku. U stránek dělaných pomocí CSS
stačí přidat pár </DIV> a nebo vložit nové <DIV> s existujícím ID nebo CLASS. Možností je opravdu mnoho ... 
Super, tak jsme si řekli, že povolené HTML nejsou to pravé ořechové. Ale co s tím?
Představte si, že máte proměnnou $text, ve které máte uložený příspěvek. Nyní se koukněte do zdrojáku své
návštěvní knihy a nejděte si místo, kde se příspěvek někam ukládá (buď soubor nebo databáze). Před tímto
uložením stačí do zdrojáku napsat tento kód:
$text = strip_tags($text);
Tímto kódem smažete všechny HTML tagy. Představte si ale, že by někdo chtěl napsat HTML tag do návštěvní knihy
a potřebuje, aby ho ostatní viděli. K tomu nám poslouží funkce htmlspecialchars:
$text = htmlspecialchars($text);
Tento kód převede znaky jako např. < a > na HTML entity. Pokud nevíte, co to jsou HTML entity, tak jukněte na www.jakpsatweb.cz
Naší návštěvní knihu jsme sice již zabezpečily proti HTML tagům, ale ještě nám zbývá jedna malinkatá věcička. Pokud návštěvník napíše řetězec znaků a neoddělí je mezerou, text se v příspěvkách nezalomí. Výsledně to pak vypadá tak, že text přetéká (přes tabulku nebo div) a někdy může dojít k pěkné deformaci stránky
. A tak do našeho zdrojáku přidáme další řádek kódu a použijeme funkci WordWrap:
$text = WordWrap($text, 30, " ", 1);
Zápis této funkce muže být různý, ale já jsem použil toto. Pro použití stačí zkopírovat a vložit do Vašeho zdrojáku :))
Samozřejmě existují i jinačí způsoby zabezpečení, o kterých napíšu možná později. Možná si říkáte, že by se přece jenom hodilo povolit nějaké formátovací HTML tagy (např. <B> <STRONG> <I> <U> ...), ale o tom napíšu zas někdy příště ... ;]
Kategorie: Web a vše kolem něj ≈ 15. 11. 2005 ≈ Počet zobrazení: 11147x

Stejně tak i u </div>
Někdy se mi povedlo udělat z validní stránky (xHTML) stránky se 150 chybami
Stačilo je "pár" </div>




. Jinak strip_tags je celkem nevhodné pro tyto účely, htmlspecialchars bych více vyzvedl jako to "jediné a úžasné" řešení
. Chybí mi tam ještě kontrola vkládání prázdných řetězců, kdy skript může kontrolovat, jestli je řetězec prázdný, či ne, ale je třeba nejdříve použít funkce trim na jeho osekání od bílých znaků na začátku a na konci.