Powered by slightly modified MediaWiki and TED Notepad.

Dev:Coding Issues

Toto je zavazny dokumnet, ktory musime vsetci dodrzovat pri pisani kodu.. Samozrejme je mozne sa dohodnut na vylepseniach, aby to vyhovovalo vsetkym.. Nejak to vymyslime a budeme dodrzovat.

Contents

sql data escaping

Problem: Vstupne premenne byvaju obvykle automaticky escapovane, takze pokial uzivatel zadal vo formulari text McDonald's, script do vstupnej premennej vlozi string McDonald\'s. Dovod je ten, ze ked sa takato vec insertuje potom do sql, nevznikaju zbytocne sql injections. Ked vsak neskuor tento string selectneme z databaze, uz nie je dovod, aby bol escapovany.. iba ze by sme ho chceli zase pisat do databaze. Problem teda nastava v situacii, kedy nam takyto string bude v systeme rozne pobehovat a rozne casti systemu budu rozne ocakavat jeho tvar.

Riesenie: Vsetky user-stringy v escapovanej podobe. To znamena, ze kazdy string, ktory budete vypisovat ci inak zpracovavat bude treba odescapovat a potom zase zaescapovat.. Zabrani to dosti nebezpecnym a hlupym security bugom v databaze.

Poznamky: Na odescapovanie pri vypisovani mozte pouzit XHTML::UserText();, ktora okrem inenho aj nahradi specialne znaky html entitamy. Na odescapovanie pri spracovavani pouzite stripslashes(). Na zaescapovanie addslashes().

htmlspecialchars

Beznou chybou na strankach je, ze ked uzivatel do textoveho editboxu zada string typu "ahoj" (vcetne uvodzoviek), formular odosle a ten sa mu vrati kvoli chybe, vo formulari by mali byt prednastavene jeho napisane hodnoty.. To ale znamena, ze v html kode sa objavi nieco na sposob:

<input type="text" name="key" value="xyz" />

V tomto pripade sa vsak za xyz nahradi "ahoj" a vysledok:

<input type="text" name="key" value=""ahoj"" />

To uz ale nie je validny html kod. Dalsie priklady, kapanek horsie:

 xyz" style="color:red
 xyz" /> Akykolvek html kod, ktory sa zobrazi za editboxom...

Na riesenie tohoto problemu je vhodna funkcia XHTML::UserText();.. problem je, ze ju treba pouzivat uplne vsade a casto sa na nu zabuda..

bool datatype

Datovy typ bool v phpkach - nezabudajte, ze false sa vyhodnocuje ako prazdny string, ked sa strka do stringu. Takze ked spravite:

$b = false;
$query = "SELECT * FROM table WHERE b = '".$b."'";

Vylezie vam z toho:

SELECT * FROM table WHERE b = ''

I ked stale funkcny prikaz, nie zrovna to, co sme chceli.. Preto nezabudajte, ze typ bool potrebuje pretypovat na int a potom pri selecte zase spat:

$db["a"] = (int)$a;
$a = (bool)$db["a"];

name escaping

Niektore nazvy stlpcov/tabuliek potrebuju byt escapovane (napr. sql keywords). Idealne by sme vsak mohli escapovat uplne vsetko.. pre istotu:

SELECT `uid` FROM `jsimlo_user` WHERE `session`='****'