PHP - validate / sanitize vstupov z POSTu

Programovacie jazyky, rady, poradňa...
Boccaccio
Medium Professional
Medium Professional
Používateľov profilový obrázok
Príspevky: 1097
Registrovaný: 01 mar 2014, 14:00
Bydlisko: Bratislava

PHP - validate / sanitize vstupov z POSTu

Príspevok od používateľa Boccaccio »

Ahojte,
akym sposobom robite validate / sanitize vstupov?

Konkretne mam podmienku, skratene uvediem ako:

Kód: Vybrať všetko

if (isset($priezvisko_z_postu) && strlen($priezvisko_z_postu) >= 1) echo "OK";
Problem nastava, ak upravim HTML input (co dokaze napr. aj Firefox pozmenit) a poslem $priezvisko_z_postu ako pole.
Vtedy sice plati isset(), no strlen() uz nedokaze spocitat znaky v array a vyhodi warning. Ako toto osetrit?

Napadlo ma pouzit is_array(), resp negaciu !is_array():

Kód: Vybrať všetko

if (isset($priezvisko_z_postu) &&  !is_array($priezvisko_z_postu) && strlen($priezvisko_z_postu) >= 1) echo "OK";
Ine (sofistikovanejsie) riesenie pre validaciu vstupov nepoznate?

Dakujem :smt006
*****HERO*****
Guru wannabe
Guru wannabe
Používateľov profilový obrázok
Príspevky: 2446
Registrovaný: 08 máj 2006, 1:34

Re: PHP - validate / sanitize vstupov z POSTu

Príspevok od používateľa *****HERO***** »

TLDR: if (!empty($_POST['name']) and is_string($_POST['name']) )

kazdopadne by ta validacia mala byt oddelena.

to ze vstup nie je typu aky ocakavas je omnoho zavaznejsi problem. osobne riesim najprv integritu samotneho vstupu a az potom sa pustam do konkretnejsich validacii, napr. ci je string prazdny alebo cislo je mensie ako devatstopatdesiat.

cize mne by sa to pacilo napr takto. v realnom svete by to samozrejme bolo zabalene do objektov, ale pre vysvetlenie toho co chcem to hadam staci

Kód: Vybrať všetko

class InvalidInputException extends Exception{}
class FormValidationException extends Exception{}

if(!isset($_POST['name'])){
   throw new InvalidInputException('name');
}

if(!is_string($_POST['name'])){
   throw new InvalidInputException('name');
}

/* validacia prebehla, data su take ake ocakavame a mozme tomu verit */
if(empty($_POST['name'])){
   throw new FormValidationException('name', 'Text je prilis prazdny.');
}

if($_POST['name'] == 'Osama bin Laden'){
   throw new FormValidationException('name', 'Barack Obama');
}
co tym chcem naznacit je to, ze ak tato validacia spadne na InvalidInputException, je to fatalna chyba, ktora v normalnom pripade nenastane (ak sa nejakym sposobom nemodifikoval raw request) a odchytavat by sa mala iba za ucelom logovania. ak to vsak spadne na FormValidationException, je to normalny pripad (uzivatel nevyplnil pole) a vyssie sa da odchytit a spracovat nejakou chybovou hlaskou na gui.
Napísať odpoveď