Autor | Zpráva | ||
---|---|---|---|
Dusann Profil |
Čo verifikuje táto funkcia ? Veď argument $filename odkazuje stále na $_FILES[...]['tmp_name'] čo je PHPčkom vygenerovaná cesta do temporary adresára + PHP formát názvu tmp súboru. Túto hodnotu predsa nie je možné nejak zmeniť pred PHP skriptom, tak aké riziko hrozí ak priamo použijem $_FILES[...]['tmp_name'] pre kopírovanie ?
|
||
Martin2 Profil * |
#2 · Zasláno: 6. 9. 2016, 18:08:16
Pokud vzápětí používáš funkci
move_uploaded_file , tak je kontrola pomocí is_uploaded_file zbytečná.
Jinak do superglobálních polí (jako je $_FILES ) lze, žel bohu, při běhu programu stále zapisovat, takže teoreticky bys mohl chtít někdy kontrolovat, jestli je cesta k temporary souboru korektní, ale jak jsem psal – v typickém případě následuje uložení souboru pomocí move_uploaded_file.
|
||
Dusann Profil |
Martin2:
„Pokud vzápětí používáš funkci move_uploaded_file , tak je kontrola pomocí is_uploaded_file zbytečná.“
„inak do superglobálních polí (jako je $_FILES ) lze, žel bohu, při běhu programu stále zapisovat“
To je známa vec, to viem. Ale aké riziko hrozí ak by move_uploaded_file() nepoužívala to isté čo is_uploaded_file() ? To by niekto musel z prostredia PHP skriptu zapisovať do $_FILES. Ak pokiaľ má niekto už kontrolu nad PHP skriptom, tak môže robiť úplne iné veci. Zaujíma ma konkrétny príklad zneužitia $_FILES[...]['tmp_name']. |
||
Davex Profil |
#4 · Zasláno: 6. 9. 2016, 20:58:54
Dusann:
„Ak pokiaľ má niekto už kontrolu nad PHP skriptom, tak môže robiť úplne iné veci.“ No právě. Nedívej se na to z pohledu útoku na PHP skript zvenčí, ale pohledem využití PHP skriptu na serveru. Kdyby funkce move_uploaded_file() nekontrolovala, že je zdrojový soubor nahraný přes HTTP POST, tak by za vhodných podmínek mohl útočník získat obsah cizích souborů na serveru. Ona totiž nekontroluje, na rozdíl od jiných souborových funkcí, zda je zdrojový soubor umístěn na povolených cestách v rámci open_basedir .
|
||
Dusann Profil |
#5 · Zasláno: 6. 9. 2016, 21:06:56
Davex:
„Kdyby funkce move_uploaded_file() nekontrolovala, že je zdrojový soubor nahraný přes HTTP POST, tak by za vhodných podmínek mohl útočník získat obsah cizích souborů na serveru.“
Čo sú to tie vhodné podmienky ? Stále je to pre mňa trochu abstraktné, rád by som videl nejaký konkrétny postup, ktorý do demonštruje. Dík |
||
Davex Profil |
#6 · Zasláno: 6. 9. 2016, 22:06:13
Dusann:
„Čo sú to tie vhodné podmienky ?“ Třeba nastavení práv u souborů, které umožňuje změnu komukoliv nebo uživateli, pod kterým jsou spouštěny PHP skripty. „Stále je to pre mňa trochu abstraktné“ Nedovedeš si představit, že by se dalo přistoupit k souborům jiného uživatele na webserveru mimo „domovský/kořenový“ adresář webu? Třeba move_uploaded_file("/var/www/virtual/example.com/www/wp-config.php", "./ukradeny-wp-config.php"); |
||
Dusann Profil |
#7 · Zasláno: 6. 9. 2016, 22:44:31
Davex: No ale pokiaľ sa bavíme o skripte ktorý vlastní niekto iný, tak stačí keď použije napr. copy()...stále mi uniká pointa ochrany v move_uploaded_file() v mojom skripte.
|
||
Davex Profil |
#8 · Zasláno: 6. 9. 2016, 22:53:28
Dusann:
„stačí keď použije napr. copy()“ Nestačí, protože copy() ho pustí pouze do adresářů, které jsou uvedené v open_basedir .
„stále mi uniká pointa ochrany v move_uploaded_file() v mojom skripte“ Ochrana spočívá v tom, že na serveru můžeš přesouvat pouze soubory, které byly na server nahrány přes HTTP POST. Nemůžeš přesouvat cizí soubory a škodit. |
||
Dusann Profil |
Ešte k tej ukážke Example #1 v tomto linku: php.net/manual/en/function.is-uploaded-file.php
Ako sa môže niekto cudzí dostať ku premennej $_FILES[...]['tmp_name'] v mojom skripte a prepísať ju ? (Keďže je nutná kontrola cez is_uploaded_file()) |
||
Davex Profil |
#10 · Zasláno: 8. 9. 2016, 20:22:46
Dusann:
„Ako sa môže niekto cudzí dostať ku premennej $_FILES[...]['tmp_name'] v mojom skripte a prepísať ju ?“ Může třeba využít nějakou slabinu ve skriptech a vložit svůj skript, který to udělá, ale moc nechápu, k čemu by mu to mělo být dobré? „Keďže je nutná kontrola cez is_uploaded_file()“ Pokud použiješ superglobální pole $_FILES , tak není potřeba.
|
||
Dusann Profil |
Davex:
„Pokud použiješ superglobální pole $_FILES , tak není potřeba.“
Viď. ukážka v linku vyššie - tam je is_uploaded_file () použité. „Může třeba využít nějakou slabinu ve skriptech a vložit svůj skript, který to udělá, ale moc nechápu, k čemu by mu to mělo být dobré?“ No aby sa nebolo možné dostať napr. ku /etc/passwd. Aj keď tomuto zamedzuje predsa open_basedir, ak je nastavený na website root. Čiže is_uploaded_file () potom nemá využitie ? |
||
Martin2 Profil * |
#12 · Zasláno: 9. 9. 2016, 03:26:27
Dusann:
„Čiže is_uploaded_file () potom nemá využitie ?“ Má využití. Kontroluje, jestli odkazovaný soubor na disku serveru vznikl jako výsledek přijetí přílohy aktuálního požadavku. Třeba kdyby chtěl script ověřit úspěch uploadu, ale soubor nechal skartovat garbage collectorem – třeba, co já vím? Jaký smysl má tvé pachtění po „zbytečných“ funkcích PHP? Jsou jich desítky. Historii Apache serveru a PHP psali pankáči, proto musí PHP dodnes řešit bezpečnost a rozdělení pravomocí svých uživatelů tímto prasečím způsobem. Apache sám o sobě je minové pole sdílených prostředků ve kterém rejdí zbastlené céčkové moduly, které napsal někdo dřív než ses narodil. |
||
Dusann Profil |
#13 · Zasláno: 9. 9. 2016, 09:26:14
Martin2:
„Třeba kdyby chtěl script ověřit úspěch uploadu, ale soubor nechal skartovat garbage collectorem“ Veď PHP automaticky maže upload v tempe, nie ? A úspech uploadu zistíš cez [error] vo $_FILES. „Jaký smysl má tvé pachtění po ‚zbytečných‘ funkcích PHP? Jsou jich desítky.“ Nepachtím sa, ale na viacerých miestach som sa dočítal o používaní is_uploaded_file() kde bola stále len nekonkrétna zmienka že bez tejto funkcie môže dôjsť k zneužitiu, tak ma len zaujímalo proti čomu funkcia ochraňuje. |
||
Martin2 Profil * |
#14 · Zasláno: 9. 9. 2016, 10:03:28
Dusann:
„úspech uploadu zistíš cez [error] vo $_FILES.“ No a nějakého důvodu, který nebudeš nikomu prozrazovat, můžeš chtít udělat metodu pracující s uploadovanými i jinými soubory. Pak se ti bude hodit is_uploaded_file pro přípravu souboru před dalšími operacemi.
„tak ma len zaujímalo proti čomu funkcia ochraňuje.“ Na což jsme ti odpověděli už tady [#2] a tady [#4] |
||
Časová prodleva: 8 let
|
0