Osetrenie vstupu I

09.06.2001 00:54

Kazdy programator si musi svoje programy/skriptyladid, debugovat a osetrovat.O php to plati dvojnasobne. Kedze navstevnikov jevela, najdu sa medzi nimi aj velmi sikovni, ktorinemaju po nociach co robit a tak sa snazia nicit weby,boardy, ankety atd.. je hlupe mysliet si,ze mne sa to nemoze stat. Potom uz je neskoroplakat nad tym, ako mi niekdo rozhadzal celu webu, ako mi tam dal svoj vlastny odkaz, zmenil menu atd.a pritom mozno stacilo do skriptu doplnit jednupodmienku, alebo zakazat html tagy.Prave tomuto problemu sa budeme v tomto serialy venovat.Ako teda moze niekdo poskodit nasu webu ?Zde je par moznosti:- ak sa weba sklada z tabuliek, ktore sa daju lachko posuvat, moze ich porozhadzovat tak, ze niektora bunka moze byt aj 1000 bodov vzdialena od jej povodneho miesta. tento efekt sa vecsinou da dosiahnut vdaka neosetrenej velkosti vstupu.- stranku moze z graf, hladiska znehodnotit aj tym, ze do textoveho pola zada html kod, a na stranke sa potom zobrazi velky text, link, presmerovanie.. preto treba vsetky html kody filtrovat.- zlym pouzivanim funkcie include. mozno vlozit namiesto danej stranky uplne inu. alebo v horsom pripade si mozno priamo cez browser pozriet hociaky subor ulozeny na disku vratane tych systemovych.V tejto prvej casti si povieme nieco blizsie o nechcenychhtml tagoch. Odstranit vkladanie tychto tagov je velmi jednoduche, ale casto sa nato zabuda, alebo sa tam nechavajukvoli lepsej funkcnosti. Avsak prave tu prichadzaju velmi vychytrali ludia. A predstavte si, niektori ludiadokonca vedia ako v html zvecsit text alebo mu zmenitfarbu. :) A timto ludom nevysvetlite ze html tagy ste nechali preto, aby sa mohli pouzivat napr. odkazy. Cize pravidlo c.1: vzdy zakazat html tagy.Najlepsie sa to vysvetli na priklade:mame board, kde vpisujeme meno a odkaz.<input type=\"text\" name=\"meno\" size=15></input><textarea name=\"odkaz\" cols=55 rows=10></textarea>teraz v php skripte mame 2 premenne: $meno, $odkaz.ked tieto premenne vlozime do db, a neskor vytiahneme,a budu v nich html tagy, tak to moze poskodit web.cize este pred tym, ako ich vlozime do databazy alebo suboru,nejako ich osetrime. pouzijeme tuto konstrukciu:$meno=str_replace(\"<\",\"&-lt;\",$meno);$meno=str_replace(\">\",\"&-gt;\",$meno);$odkaz=str_replace(\"<\",\"&-lt;\",$odkaz);$odkaz=str_replace(\">\",\"&-gt;\",$odkaz);//v ostrom skripte \"&-lt;\" bez pomlcky,pretoze keby som to tu pisal bez nej, zobraziloby to \">\" cim by tento priklad stratil na vyznamea iba by vas zbytocne poplietol//timto sme nahradili vsetky \"<,>\" v obidvochpremennych za ich entity //s naozajstnom skripte,ich treba napisat bez pomlcky//. tak isto sme ich mohli nahradit pomocou znaku &(ampersandu),mriezky(#)a jeho polohy v ASCII kode :).nahradili sme ich funkciou str_replace, ktorama tri parametre. prvy je znak, ktory chceme nahradzat,druhy: zaco ho chceme nahradit a treti: v com to chcemevykonat. samozrejme vysledok musime priradit nejakej premennej, moze byt aj ta ista.teraz mozeme s premennymi pracovat: napr.:echo \"$odkaz\";takto osetreny skript, nam potom nevypise vykonany html kod,ale pekne nam ukaze zdrojovy kod.samozrejme existuju este dalsie moznosti ako nahradit/zakazathtml tagy, ale tento sa mi zda najjednoduchsi a najlepsi.v dalsej casti serialu si povieme ako osetrovat skripty proti privelkemu/ziadnemu vstupu dat.mis0 truban