Zabezpečovanie skriptov + webového formulára

Najvážnejší problém môžu predstavovať includované vzdialené súbory, tzv. cross-site scripting, kde server vykonáva akýkoľvek skript prístupný online. Ak použijeme funkciu include() bez dostatočného ošetrenia, napríklad takto:
 

 
potom k uskutočneniu útoku stačí nezabezpečenému skriptu predložiť vhodne modifikovanú premennú $_GET[page]:
http://www.domena.koncovka/main.php?page=http://geocities.com/stranka_utocnika/skript_pouzity_k_utoku.txt?
 
Pred týmto zneužitím je možné skript zabezpečiť kontrolou všetkých predávaných vstupov. Pri redakčných systémoch (Joomla, Wordpress) odporúčame dôsledné vykonávanie aktualizácií a inštaláciu komponentov iba z dôveryhodných zdrojov.
 
 
 
Na zabezpečenie zneužitia formulárov k rozosielaniu spamov (alebo, napríklad zahlteniu návštevnej knihy reklamou) môžete použiť nasledujúci skript. Do formulára, kam návštevník píše svoju správu, pridáme ďalšie pole, do ktorého musí opísať kód z obrázka. Obrázok sa generuje pri každom obnovení stránky/načítaní skriptu. Po odoslaní dát z formulára (napríklad pre funkciu mail() alebo vloženie príspevku do návštevnej knihy) sa porovnáva text uložený pri generovaní obrázka do session a text odoslaný formulárom. Ak text nesúhlasí, nie sú dáta odovzdané výkonnému skriptu - tzn. email sa neodošle alebo príspevok nie je vložený.
 
 
Potrebné súbory môžete stiahnuť tu - archív zabezpeceni.zip obsahuje tieto súbory:
  • 3 súbory s príponou ttf: to sú voľne šíriteľné písma, ktoré môžete využiť na zobrazenie textu (je možné nahradiť ich akýmkoľvek truetype písmom, ale potom nezabudnite v skripte zmeniť odkaz) - tu sú k dispozícii FreeMono.ttf (podobné písmu Courier), FreeSans.ttf (podobné písmu Arial) a FreeSerif.ttf (podobné písmu Times Roman).
  • formular.php: skript, v ktorom je vygenerovaný obrázok + kód je uložený do session. Na generovanie textu je použitý font FreeSerif.ttf
  • kontrola.php: skript, ktorý spracováva dáta z formulára (kontroluje, či súhlasí kód opísaný z obrázka a text uložený do session po vygenerovaní obrázka).
Do skriptu kontrola.php (môže sa samozrejme nazývať inak) vložte namiesto hlásenia "Bol vložený správny kód" vlastnú výkonnú časť Vašej aplikácie, ktorá spracuje ďalšie dáta z formulára: napríklad zostaví email a odošle ho pomocou funkcie mail().
 
Doplnenie:
 
V php skriptoch sa vždy musí kontrolovať všetko, čo sa vkladá zvonku do hlavičky mailu From a Reply-To, inak je značné riziko ich zneužitia k rozosielaniu spamu. Ak použijeme funkciu mail() bez ošetrenia, napríklad takto:
 
 
potom spammer v premennej $_POST["from"]pošle celý spam i s adresami ďalších príjemcov:
 
 
Skripty proti podobnému zneužitiu ochránite napríklad orezaním znakov za zalomením riadka a nahradením špeciálnych znakov za html entity.