Autor | Zpráva | ||
---|---|---|---|
Měsíček Profil |
#1 · Zasláno: 4. 12. 2008, 15:57:18
Já to viděl ještě před [editem] bylo to pěkné řešení, mohl jsi ho tam nechat.
|
||
bohyn Profil |
#2 · Zasláno: 4. 12. 2008, 16:06:42
Měsíček
Pak sem si rek ze by nektery moderaror mohl prispevek smazat, ale text mam schovany. Takze jestli to nekdo odsouhlasi tak muzu poslat znovu. Nicmene reseni uz jsem napsal a to by snad melo byt dostacujici. Opakovani matka moudrosti - pred includem osetrete promenou: $stranka = addslashes($_GET['stranka']); include $stranka.".php"; |
||
Gnd Profil * |
#3 · Zasláno: 4. 12. 2008, 20:38:22
„Ten kod je nevykonal u tebe na serveru (tam kde byl obrazek nahran), ale na serveru kam si ho includoval.“
nahral jsem pres deravy upload jpg s kodem pro vytvoreni souboru a jeho ulozeni s nejakym obsahem. Includoval jsem jpg ze sveho localhostu. Kod se vykonal jak pises asi u me na localhost, ale soubor se vytvoril na serveru, kde bylo ono jpg s uvedenym kodem. Testoval jsem to a opravdu se stalo, jak popisuji, proto nechapu, proc se soubor vytvoril na strane jpg a ne na strane includovani. |
||
Sicario Profil * |
#4 · Zasláno: 4. 12. 2008, 21:16:35
bohyn
$stranka = addslashes($_GET['stranka']); include $stranka.".php"; Tohle IMHO nic neresi. Krom toho addslashes se na vetsine hostingu deje automaticky. Lepsi reseni je kontrolovat obsah $stranka na vyskyt nezadoucich retezcu a pripojit k tomu nejaky prefix. Treba absolutni cestu, './' nebo 'prefixskriptu_'. Jestli se posila co se ma vlozit i ve tvaru ?stranka=adresar/skript, je dobre cely retezec rozlozit (explode). Pak otestovat jestli se adresar naleza v mnozine adresaru, ze kterych chceme includovat. Atd... Neni to nijak zdlouhava prace a muze ji vyresit jedna kratoucka funkce, trida, nebo neco takoveho:-) |
||
imploder Profil |
#5 · Zasláno: 4. 12. 2008, 22:41:37
bohyn
Já jsem vymyslel include "./".$_GET["stranka"].".php"; To by mělo zabránit jak urlincludu, tak hrabání se v nějakých nadřazených adresářích. Je to odolné i proti té tvé tajné metodě? |
||
bohyn Profil |
#6 · Zasláno: 4. 12. 2008, 23:28:01
imploder
„Je to odolné i proti té tvé tajné metodě“ Ano. "./" v podstate nic neresi. Toto funguje "./"."../soubor.php" Sicario „Treba absolutni cestu, './' nebo 'prefixskriptu_'“ "./" jak sem psal vyse, a neni to absolutni cesta. "prefix_" by zabral pokud ho utocnik neodhali, pak muze nahrat "prefix_trojan.jpg" „Krom toho addslashes se na vetsine hostingu deje automaticky. “ magic_quotes_gpc je reseni pro dummies, kdo zvladne zakladni bezpecnost tak tomu tato direktiva spis prekazi. Nicmene problem to resi „Neni to nijak zdlouhava prace a muze ji vyresit jedna kratoucka funkce, trida, nebo neco takoveho:-)“ Kontrolovat vyskyt retezcu a z jakeho adresare se includuje lze, ale vetsina programatoru pouzije suffix ".php" a je "za vodou". Gnd Muzes mi to jpg poslat na mail v profilu? To ze se soubor ulozil na vzdalenem serveru je docela zajimave. |
||
Sicario Profil * |
#7 · Zasláno: 5. 12. 2008, 00:27:35
bohyn
Tak jo, uznavam addslashes skutecne resi jeden pripad, kdy je mozne obejit include $stranka.".php";, ktery je osetreni resen jen sufixem. Musel jsem si to otestovat a je to pro me novinka. Znak x0 je pekna mrcha. Tak jsem se zas neco priucil:-) |
||
imploder Profil |
#8 · Zasláno: 5. 12. 2008, 06:14:15 · Upravil/a: imploder
No jo...
Tak tohle je už snad opravdu neprůstřelné: if(ereg("^[a-zA-Z0-9]*$", $_GET["stranka"])) include "./".$_GET["stranka"].".php"; else { header("Status: 403 tahni do ****"); exit(); } |
||
Časová prodleva: 3 dny
|
|||
krteczek Profil |
#9 · Zasláno: 8. 12. 2008, 11:59:04
pánové stále tady řešíte dva oddělené problémy.
1. musíte vyřešit jak includovat soubory. Stále tady řešíte jak udělat BLACK list ale niko z vás nenapadlo jít na to opačně, to znamená mít WHITE list a proti němu kontrolovat include souborů. Přitom je to jednodužší naž vymýšlet pravidla co ještě zakázat.... <?php $whiteList = array( 'prace' => 'prace', 'gallery' => 'gallerie', //atak dále ); if(!empty($_GET['page'])) { if(array_key_exists($_GET['page'], $whiteList)) { include($whiteList[$_GET['page']] . '.php'); } else { //stránka neexistuje takže něco s 404 ;) } } else { //protože v adrese není nic tak zavoláme úvodní stránku include('uvod.php'); } Je tento způsob nějak nebezpečný pro váš web? Je jen možná trochu pracnější teď při přepisování ;) Tímto vlastně máme vyřešen i druhý problém, protože nikdo include nahraného IMG souboru nesvede ;) Pokud se mýlím, rád si přečtu argumenty proti ;) |
||
Časová prodleva: 3 měsíce
|
|||
pirat89 Profil * |
#10 · Zasláno: 13. 3. 2009, 18:33:28
sice je již diskuze mrtvá, ale pro případné zájmece, kteří chtějí zabezpečit upload souborů bude od verze php 5.3.0 k použití nová funkce finfo_file , která bude kontrolovat mime souboru na základě obsahu a ne informací od klienta. Původně k tomu sloužila mám dojem funkce mime_content_type . S tou byly ovšem neustálé problémy (ani ja jsem ji nerozchodil, naustala se dozadovala inicializace pricemz soubor byl v pořádku podle všeho) a je proto dnes na listině zapovězených funkcí. Většinou se její funkce zafixovala pomocí knihovny finfo_file.dll ale ta je dnes v rekonstrukci právě pro verzi 5.3.0.
|
||
Časová prodleva: 15 let
|
0