peehaa Posted April 27, 2007 Report Share Posted April 27, 2007 if(stristr($filename, "!") === FALSE) { echo "viss štokos"; } šādi es pārbaudu, vai $filename nesatur '!' [ viss strādā ], bet kā lai pārbaudu, vai $filename nesatur gan '!', gan '@' un citas lietas? $xss = array(";" , "," , "-" , "!" , "'" , "?" , ">" , "<" , "&"); if(stristr($filename, $xss) === FALSE) { echo "viss štokos"; } šāds variants man nestrādā. varbūt stristr() vietā var izmantot ko efektīvāku? $filename satur $_GET['name'], bet es vēlos izvairīties no xss tipa uzbrukumiem caur url`i. Link to comment Share on other sites More sharing options...
andrisp Posted April 27, 2007 Report Share Posted April 27, 2007 (edited) Tavs variants balstās uz black list metodi, bet drošāk būtu white list. Visvieglāk būs: if (preg_match('/[a-z0-9_\.]+/i', $filename)) { // viss shtokos } Edited April 27, 2007 by andrisp Link to comment Share on other sites More sharing options...
peehaa Posted April 27, 2007 Author Report Share Posted April 27, 2007 (edited) tiešām nebiju iedomājies par white list, lielliels paldies. :) tevis iedotais variants neaizsargā no xss pilnībā, būs japalasa par patterniem. ?go=works&name=* - attēls netiek parādīts, paziņojums par iespējamu xss parādās. ?go=works&name=a*a - attēls netiek atrasts, bet paziņojuma nav. - pieprasītais fails a*a.jpg netika atrasts. ... turpinu lasīt. :> Edited April 27, 2007 by peehaa Link to comment Share on other sites More sharing options...
v3rb0 Posted April 27, 2007 Report Share Posted April 27, 2007 vajag vēl pateikt ka jāsak meklēt no rindas sākuma un jabeidz ar rindas beigām. ^[a-z0-9_\.]+$ tagad tu meklē lai tikai būtu vismaz viens no atļautajiem - tb. "a" atbilst a-z daļai, vairāk neko ar nepārbauda un uzskata par derīgu. Link to comment Share on other sites More sharing options...
andrisp Posted April 27, 2007 Report Share Posted April 27, 2007 My bad :) Link to comment Share on other sites More sharing options...
Recommended Posts