Bezpečnosť údajov zadaných užívateľom v PHP

Každá internetová stránka sa snaží spĺňať pravidlá bezpečného webu. Najväčším rizikom sú vždy údaje od užívateľov. Nikdy neviete kto a čo plánuje s vašim webom a opatrnosti nieje nikdy dosť.

Pri prevádzke dynamických internetových stránok existujú rôzne bezpečnostné hrozby od SQL injection, cez XSS... Tento článok by Vám mal pomôcť ako a na čo si dať pozor pri dátach prichádzajúcich od užívateľa.

  • Vždy predtým ako nejaké údaje uložíte do databázy, prežente ich funkciou addslashes(). Tá potlačí význam niektorých špeciálnych znakov ktoré by mohli spôsobiť problémy. Pri získavaní údajov z databázy musíte potom použiť funkciu stripslashes() ktorá odstráni spätné lomítka a údaje budú v pôvodnom stave.
  • V súbore PHP.INI existujú direktívy magic_quotes_gpc a magic_quotes_runtime. Magic_quotes_gpc je funkcia magických úvodzoviek ktorá všetkým údajom prichádzajúcim z GET, POST a COOKIEs automaticky vkladá spätné lomítka. Pri tejto direktíve nieje na škodu vytvoriť si vlastnú funkciu add_slashes() ktorá by nazávisle na tom, či je magic_quotes_gpc zapnuté alebo nie.Môžeme ju urobiť pomocou jednoduchého ternárneho operátora:

function gpc_addslashes($str)
{
//funkcia zistí, či je magic_quotes_gpc zapnuté alebo nie
//a podľa toho aplikuje na reťazec addsleshes() alebo nie
return (get_magic_quotes_gpc() ? $str : addslashes($str));
} 

Druhá direktíva magic_quotes_runtime ošetruje dáta idúce z databázy.

  • Niekedy potrebujeme zobrazovať v php aj časti HTML kódu ktorý sa môže vykonať a spôsobiť problémy. Jednoduchým riešením je funkcia strip_tags() ktorá umožňuje automatické odstránenie všetkých tagov. Má aj nepovinný parameter v ktorom môžeme zapísať povelené tagy. Týmto zabránime prípadnému útočníkovi zadávať scripty ktoré by sa mohli vykonať a smerovať naspäť do prehliadača.
  • Ak chceme zobrazovať HTML kód ale nechceme aby sa vykonal môžeme použiť funkciu htmlspecialchars() ktorá pretvorí znaky na neškodné HTML entity. Napríklad znak < by premenila na <
  • Pokiaľ nejaké údaje dávame funkciám system() alebo exec() mali by sme použiť funkciu escapeshellcmd(). Touto funkciou potlačíme význam všetkých metaznakov a tým zabránime spúšťaniu akýchkoľvek príkazov.
  • Ak pracujete s číselnými hodnotami (napríklad SQL dotaz prijímajúci číselnú hodnotu z URL) mali by sme hodnotu testovať pomocou funkcie intval(). Táto funkcia skúša či hodnota sa dá premeniť na číslo, ak to nebude číselná hodnota vráti 0, dobrá funkcia pri ochrane pred SQL injection.

Toto boli základné pravidlá bezpečnosti ktorých by ste sa mali držať aby ste riziko minimalizovali a vyhli sa tak najväčším chybám.



Podobné články

Klasické komentáre

Žiadne komentáre   :-(

Pridať komentár

Facebook komentáre ()

Napíš komentár