Autor | Zpráva | ||
---|---|---|---|
1ight Profil |
#1 · Zasláno: 30. 10. 2008, 18:46:21
1) Dobrý večer mam v adresové řádce ( v pořádku spracováno )
http://www.neco.cz/index.php?file=Mt%252520Picture%252520Janina%252520 08.jpg 2) ale problém kdyz na tý stránce v php dám echo $_REQUEST['file'] a vyjde mi output: Mt%2520Picture%2520Janina%252008.jpg Rozdily: 1) Mt%252520Picture%252520Janina%25252008.jpg 2) Mt%2520Picture%2520Janina%252008.jpg Nevíte nekdo jak vy $_REQUESTOVAT nebo vy $_GETOVAT realne to co napsáno je v adresový řádce? S pozdravem |
||
Nox Profil |
#2 · Zasláno: 30. 10. 2008, 18:49:24
urldecode ?
|
||
1ight Profil |
#3 · Zasláno: 30. 10. 2008, 18:54:22
Jste machři, fakt vždycky mě tu dostanete když fakt nevim kam jsem se to dostal
Funkční řešení: urlencode($_REQUEST['file']) Fakt děkuju moc už jsem se to tu pokoušel hledat.. |
||
Nox Profil |
#4 · Zasláno: 30. 10. 2008, 19:03:17 · Upravil/a: Nox
Už sem se bál, že to byl sarkasmus (no a jestli je tak holt budu za blba:) )
|
||
1ight Profil |
#5 · Zasláno: 30. 10. 2008, 21:25:50 · Upravil/a: 1ight
Takže jsem zjistil negativní chování pri urlencode a urldecode ( translatuje to hlava nehlava )
Řešení je asi použít $_SERVER['REQUEST_URI'] kde neni žádný překlad a je napsána přesná adresa. V php.ini jsem nic nenašel kde by se dalo nějaký takové zvláštní chování $_REQUESTU vypnout. Kdyby se tímto chtěl někdo zabývat tak problém je přesně tady: Dejte si do url nekam ?file=Mt%252520F%f% a přes $_REQUEST['file'] nebo $_GET vám to při echu změní do tvaru Mt%2520F%f% ( ubere jednu číslici 25 ) urlencode / urldecode se to neda fixnout, protože translatuje všechno i co by neměl ( takže by tam nebyla žádná 25tka a při druhým chování by byla všude u % + číslice 25).... ___ Takže řešení je asi vyparsovat $_SERVER['REQUEST_URI'] a z něho to pak zpracovat. ___ Další řešení je to zakodovat base64_encode a rozkodovat base64_decode asi nejlepši S pozdravem |
||
BetaCam Profil |
#6 · Zasláno: 31. 10. 2008, 03:52:10
1ight
„Nevíte nekdo jak vy $_REQUESTOVAT nebo vy $_GETOVAT realne to co napsáno je v adresový řádce? Takže jsem zjistil negativní chování pri urlencode a urldecode ( translatuje to hlava nehlava ) “ No super globální pole $_GET a $_REQUEST sou automaticky prohnány přes funkci urldecode() viz. manuál : The superglobals $_GET and $_REQUEST are already decoded. Using urldecode() on an element in $_GET or $_REQUEST could have unexpected and dangerous results. „Kdyby se tímto chtěl někdo zabývat tak problém je přesně tady: Dejte si do url nekam ?file=Mt%252520F%f% a přes $_REQUEST['file'] nebo $_GET vám to při echu změní do tvaru Mt%2520F%f% ( ubere jednu číslici 25 )“ nic neubere pouze se to dekóduje viz výše je to standardní chování a v manuálu je na to extra upozornění. Už jen takovej OT : Kde ti vlastně bereš ten string Mt%252520Picture%252520Janina%25252008.jpg ?? Možná sem paranoidní, ale proč mi na první pohled přijde divné, že ten soubor se jmenuje : Mt%2520Picture%2520Janina%252008.jpg proč mám takovej pocit, že ten soubor se ve skutečnosti jmenuje : Mt Picture Janina 08.jpg proč se mi prostě na první pohled když se kouknu na ten tvůj odkaz vybaví kód : rawurlencode(rawurlencode(rawurlencode('Mt Picture Janina 08.jpg'))); asi sem fakt paranoidní, ale nemáš tam náhodou už bordel při encodování toho url?? |
||
1ight Profil |
#7 · Zasláno: 31. 10. 2008, 17:20:51 · Upravil/a: 1ight
Já se omlouvám druhý příklad kde je ta druhá chyba při tom druhém negativním chování jsem zde neudal zkuste tohle
Dejme tomu že se soubor na disku jmenuje takto a pošlu ho REQUESTEM že chci zobrazit klientovi tento uvedený soubor ( vše v pořád až na to že REQUEST nebo GET si to modifikuje hlavna nehlava. Jinak se předem omlouvám jestli dělám nekde celou dobu chybu... Včera jsem ty requesty predelal do base64_decode a encode od té doby mi vše funguje do url vložte &ss=Mt%252520Picture%252520Janina%a.jpg ___ echo 'Mt%252520Picture%252520Janina%a.jpg<br />'; echo urlencode($_REQUEST['ss']); echo '<br />'; echo urldecode($_REQUEST['ss']); echo '<br />'; echo $_REQUEST['ss']; Predem se jinak omlouvám jestli tu píšu nějakou nepravost ale beru to tak jak vidím u mě v počitači výsledek u mě je: Mt%252520Picture%252520Janina%a.jpg Mt%252520Picture%252520Janina%25a.jpg Mt%20Picture%20Janina%a.jpg Mt%2520Picture%2520Janina%a.jpg výsledek je soubor nenalezen |
||
BetaCam Profil |
#8 · Zasláno: 31. 10. 2008, 19:04:49
1ight
1) Jak se menuje soubor který je uložen na disku. 2) jak získáváš ve scriptu to URI Mt%252520Picture%252520Janina%a.jpg 3) „Mt%252520Picture%252520Janina%a.jpg Mt%252520Picture%252520Janina%25a.jpg Mt%20Picture%20Janina%a.jpg Mt%2520Picture%2520Janina%a.jpg “ toto je přece, ale naprosto předvídatelný výsledek. Měl by sis uvědomit, že ani funkce urldecode ani urlencode nepracují s referencí, ale s kopií stringu |
||
1ight Profil |
#9 · Zasláno: 31. 10. 2008, 19:34:18
1) Soubor přejmenuju na a pak ho pošlu na server inputem:
Mt%252520Picture%252520Janina%a.jpg 2) code ktery mi vygeneruje jmeno všech souboru $getdir = dir("."); $entries = array(); while($entry = $getdir->read()) { if ($entry!= '.' && $entry!= '..' && $entry!= 'index.php' && $entry!='default.php' && $entry!='.htaccess') { echo $entries[] = $entry; } } Realny echo výsledek ktery se mi zobrazi je : Mt%252520Picture%252520Janina%a.jpg 3) toto udám do linku např <a href="' . $neco . '&soubor=' . $souboru . '" 4) po kliknutí na odkaz a spracování v adresové řádce je soubor v pořádku jen je zde problém při echování REQUESTU na odeslané stránce viz chování echo $_REQUEST['ss'] Mt%252520Picture%252520Janina%a.jpg Mt%252520Picture%252520Janina%25a.jpg Mt%20Picture%20Janina%a.jpg Mt%2520Picture%2520Janina%a.jpg _______________________ Odpověd: urldecode ani urlencode nepracují s referencí, ale s kopií stringu to jsem právě nevědel že to neni až tak dokonale vyřešený proto jsem se tady zasekal ale tak dá se to řešti base64_decode jsem rád aspon za to a hlavne jsem rád za navedení k řešení přes urldecode, tím jsem se dostal až k base64_decode. Kdyby právě někdo věděl jestli se to da řešit nečím jiným byl bych štastnejší kdybych to nemusel řešit přes base64_decode a nebo programovat nejaky složitý filtry pro převod jmen.. Děkuji Vám za Vaše odpovědi s pozdravem. |
||
BetaCam Profil |
#10 · Zasláno: 31. 10. 2008, 22:02:31
1ight
„Kdyby právě někdo věděl jestli se to da řešit nečím jiným byl bych štastnejší kdybych to nemusel řešit přes base64_decode a nebo programovat nejaky složitý filtry pro převod jmen.. “ Dobře zeptám se jinak. 1) Proč ten soubor přejmenováváš takovímto šíleným způsobem. 2) Mt%252520Picture%252520Janina%a.jpg svědčí o tom, že máš nějaký bordel v rutině na přejmenovávání. Něco tam vypadá jako když to prošlo 3x přes rawurlencode() ( %252520 ) a něco jako když to přes encodování vůbec nešlo ( a%a ) Opravdu mám pocit, že ty tvoje problémy sou způsobené hlavně nevhodně zvolenou rutinou pro přejmenovávání souboru při uploadu na server. |
||
Časová prodleva: 8 dní
|
|||
1ight Profil |
#11 · Zasláno: 9. 11. 2008, 09:55:49
Zase jsem se dostal k tomu problemu ale tady potřebuju neco neutralniho co by nehashovalo a byly funkční odkazy asi neutralni reseni je to sfiltrovat nejakou funkci nasel jsem to nekde na google tak nejak narychlo. http://snippets.dzone.com/posts/show/1506
S pozdravem mejste se, kdyby nekdo vedel jak to vyrešit a rozkodovat ten problem viz filename Mt%252520Picture%252520Janina%a.jpg přes REQUEST prosím napište function replace_bad_filename_chars($filename) { $filtered_filename = ""; $patterns = array( "/\s/", # Whitespace "/\&/", # Ampersand "/\+/" # Plus ); $replacements = array( "_", # Whitespace "and", # Ampersand "plus" # Plus ); $filename = preg_replace($patterns,$replacements,$filename); for ($i=0;$i<strlen($filename);$i++) { $current_char = substr($filename,$i,1); if (ctype_alnum($current_char) == TRUE || $current_char == "_" || $current_char == ".") { $filtered_filename .= $current_char; } } return $filtered_filename; } |
||
Časová prodleva: 15 let
|
0