Autor | Zpráva | ||
---|---|---|---|
exColor Profil * |
#1 · Zasláno: 12. 5. 2008, 21:18:12
Ahoj, chtel bych se zeptat jak mam osetrit vstup $_GET, ktery zni treba "clanek123"? Hledal jsem a nasel jsem na internetu toto:
//kontrola, zda je id string if (!is_string($_GET["id"])): echo "Toto ne!"; else: //escapovani nebezpecnych znaku $id = mysql_real_escape_string($_GET["id"]); $dotaz = "select * from clanky where id = '$id'"; endif; Ale neni mi moc jasne proc se kontroluje za do je string, kdyz "clanek123 and 3=3" je take string, ne? Pak by me jeste zajimalo, proc je tam funkce mysql_real_escape_string() a proc tam nemuze byt addslashes()? Byl bych moc rad, kdyby mi tuto problematiku nekdo trochu osvetlil a pokud mate nekdo lepsi kod jak to osetrit, budu mnohokrat rad. Predem dekuji .) |
||
ShiraNai7 Profil |
#2 · Zasláno: 12. 5. 2008, 21:22:01 · Upravil/a: ShiraNai7
Kdyz potrebujes z $_GET['id'] cislo, tak udelas jednoduse toto:
$id=(int)$_GET['id']; $id bude celociselne cislo, kterym zadnou skodu napachat nelze. mysql_real_escape_string pouzivam i ja pro vkladani retezcu do sql dotazu edit: pokud vim, tak v poli get jsou vsechny koncove hodnoty typu string, i kdyz je vstupem platne cislo... |
||
suky Profil |
#3 · Zasláno: 12. 5. 2008, 21:24:08
exColor
Dam ti jen tip, vcera jsem si to procital a je to velmi zajimave a navic to probira komletni bezpecnost s PHP. (link) |
||
exColor Profil * |
#4 · Zasláno: 12. 5. 2008, 21:26:08
jj tomu rozumim, ale praveze v $_GET['id'] nebude cislo, ale retezec typu "clanek123" nebo "vse-o-psech1", "vse-o-psech2","novy-web" a podobne...
|
||
suky Profil |
#5 · Zasláno: 12. 5. 2008, 21:26:30
ShiraNai7
edit: pokud vim, tak v poli get jsou vsechny koncove hodnoty typu string, i kdyz je vstupem platne cislo... jj je to tak, ta kontrola nahore je uplne zbytecna |
||
ShiraNai7 Profil |
#6 · Zasláno: 12. 5. 2008, 21:29:36 · Upravil/a: ShiraNai7
exColor
Kdyby bylo id od titulku oddelene pomlckou (coz by kvuli seo melo), tak bych ho z toto extrahoval takto (nevim, jestli to bude fungovat, netestoval jsem to): id by bylo treba "psi-a-kocky-10" (10 je id clanku) $id=$_GET['id']; $id=explode('-', $id); if(count($id)>=2){ $id=(int)$id[(count($id)-1)]; //nacteni id z konce } else{ $id=-1; //neplatne id } |
||
exColor Profil * |
#7 · Zasláno: 12. 5. 2008, 21:37:24
ShiraNai7
jo takhlee...ale toto nacte cislo a porovna, ale neda se to udelat nejakym zpusobem, ktery by kontroloval cely ten retezec? nestacilo by treba projed vstup $_GET['id'] funkci addslashes()? Neda se snad provest utok bez toho aniz by nekdo nepouzil apostrofy? kdyz je cely $_GET['id'] uzavreno v apostrofech v SQL dotazu |
||
suky Profil |
#8 · Zasláno: 12. 5. 2008, 21:41:28 · Upravil/a: suky
exColor
Koukni na muj post a trochu si zastuduj najdes tam fakt vsechno, co odpovi na tve otazky... edit: myslim muj prvni post |
||
ShiraNai7 Profil |
#9 · Zasláno: 12. 5. 2008, 21:42:20
exColor
Nevím, co všechno potřebuješ načíst. Ten skript, co jsem psal, vypreparuje z ID to cislo na konci (v ciselnem formatu, sql injectinou neni mozne). To vypreparované číslo v $id potom můžeš bez obav použít v SQL dotazu bez nějakých addslashes, mysql_real_escape_string apod. Pokud potřebuješ použít v dotazu celý ten řetězec, co je v ID, prožeň ho tou mysql_real_escape_string a neměl by být problém... |
||
exColor Profil * |
#10 · Zasláno: 13. 5. 2008, 21:23:14
ShiraNai7
OK, diky..uz jsem to tak udelal a jeste bych se chtel zeptat jak to mam vyresit pri registraci uzivatelu, aby se mi neregistrovali uzivatele treba McDonald's nebo I'm_king a podobne, jde mi o ten apostrof. Jak vytvorim podminku, ktera napise ze tyto znaky nemohu pouzit? Popripade jake typy uvozovek a mam vypsat do podminky IF? Ale byl bych radsi kdyby to bylo kontrolovano pres nejakou funkci, ktera by vracela zda je (true)nebo neni (false) pouzity nevhodny znak. |
||
panmagor Profil * |
#11 · Zasláno: 14. 5. 2008, 10:29:53
Mám pocit, že to by se dalo vyřešit přes regulérní výrazy. Kdyby se zaregistroval jako I`m_king, zaregistrovalo by ho to jak Im_king
|
||
ShiraNai7 Profil |
#12 · Zasláno: 15. 5. 2008, 17:23:11
Tuto funkci používám ve svém rs, můžeš ji klidně použít.
McDonald's by mela prepsat na mcdonalds, I'm_king na imking apod //kod funkce function _anchorStr($input, $lower=true){ //diakritika $input=str_replace( array("é", "ě", "É", "Ě", "ř", "Ř", "ť", "Ť", "ž", "Ž", "ú", "Ú", "ů", "Ů", "ü", "Ü", "í", "Í", "ó", "Ó", "á", "Á", "š", "Š", "ď", "Ď", "ý", "Ý", "č", "Č", "ň", "Ň", "ä", "Ä", "ĺ", "Ĺ", "ľ", "Ľ", "ŕ", "Ŕ", "ö", "Ö"), array("e", "e", "E", "E", "r", "R", "t", "T", "z", "Z", "u", "U", "u", "U", "u", "U", "i", "I", "o", "O", "a", "A", "s", "S", "d", "D", "y", "Y", "c", "C", "n", "N", "a", "A", "l", "L", "l", "L", "r", "R", "o", "O"), $input ); //mezery $input=str_replace(" ", "-", $input); //odfiltrovani nepovolenych znaku $output=""; $len=mb_strlen($input); for($x=0; $x<$len; $x++){ $char=mb_substr($input, $x, 1); if(in_array($char, array("A","a","B","b","C","c","D","d","E","e","F","f","G","g","H","h", "I","i","J","j","K","k","L","l","M","m","N","n","O","o","P","p","Q","q ","R","r","S","s","T","t","U","u","V","v","W","w","X","x","Y","y","Z", "z","0","1","2","3","4","5","6","7","8","9",".","-"))){$output.=$char; } } //dvojite symboly /*$output=preg_replace('|--+|', '-', $output); $output=preg_replace('|\.\.+|', '.', $output); $output=preg_replace('|\.-+|', '.', $output); $output=preg_replace('|-\.+|', '-', $output);*/ $from=array('|--+|', '|\.\.+|', '|\.-+|', '|-\.+|'); $to=array('-', '.', '.', '-'); $output=preg_replace($from, $to, $output); //orezani $output=trim($output, "-_."); //prevod na mala pismena if($lower==true){ $output=mb_strtolower($output); } //return return $output; } |
||
Časová prodleva: 16 let
|
0