Ez persze sok biztonsági kérdést felvet. Ha vannak meglátásaitok (vagy hasznos doksijaitok) e téren, hogy mire érdemes vigyázni, akkor írjatok.
- szz blogja
- A hozzászóláshoz be kell jelentkezni
- 1266 megtekintés
Hozzászólások
HTTP Content-Type fejléc.
Szerk: mármint ennek alapján sejthető lett volna, hogy kliens oldalon dől el.
- A hozzászóláshoz be kell jelentkezni
Pl ha lehet, vagy kompletten ignorald az exec()-et es oldd meg mashogy, vagy legyel extrem paranoias a hivasanal. Konnyu sebezhetove tenni vele a gepet.
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
A $_FILES tömbben levő mime type mindig a klienstől jön, ezért érdemes inkább a http://hu2.php.net/manual/en/function.mime-content-type.php vagy még jobb, az azon oldalon linkelt FileInfo függvényekkel megnézni (finfo_file-nál példakód is van hozzá).
Persze jó esetben php-ből nem tudsz a tmp-dir-ben mászkálni, úgyhogy move_uploaded_file()-al először át kell tenned egy saját ideiglenes helyre, aztán belenézni a fájl típusba, és ez alapján törölni az új ideiglenes helyről, vagy átrakni a véglegesre.
Az exec/shell_exec stb. ha tényleg jól használod (escapeshellarg, kőkeményen ellenőrizve a usertől érkező adatokat, változókat csak paraméterként használva etc., nem `scriptem.sh $_GET['foo']` formában) belefér, különösen, ha csak "saját" felhasználásra van (net felől nem érhető el). Azért amit lehet érdemesebb "natívra" átírni.
BlackY
- A hozzászóláshoz be kell jelentkezni
Köszi az ötleteket!
Amúgy az exec-et mindig előre meghatározott paraméterrel hívom meg, soha nem felhasználói inputtal.
Azaz pl. "exec('./step1')".
A felhasználó csak egy-egy fájlt tud feltölteni, és azzal folyik a további manőverezés (legalábbis az eddigiekben így volt).
- A hozzászóláshoz be kell jelentkezni
Ezzel egyutt is erdemes lenne kivaltani a exec-eket. Az mindig rossz jel, ha egy php scriptnek szuksege van ezekre a fuggvenyekre...
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
nincs ezzel semmi baj, ha fix paramétereket használ
- A hozzászóláshoz be kell jelentkezni
... es ha eleg gyorsan lefut, es ha nem keveredik race condition-be sajat magaval vagy barmi massal. :)
- A hozzászóláshoz be kell jelentkezni
nem tudjuk mit csinal a step1;)
- A hozzászóláshoz be kell jelentkezni
Megrágja a beadott fájlt és (letölthető) kimenetet gyárt. Esetenként ez több percig is eltart.
Amúgy (bármennyire is "rossz jel" és webfejlesztői szemmel veszélyeket rejtő megoldás ez) pont azt szeretem ebben a témában, hogy a parancssorban kikristályosított "step1, step2, ... stepn" lépéssort könnyen-gyorsan-fájdalommentesen át lehet ültetni webes "Tovább" gombokra, s így -- mint írtam -- szakavatatlan is végig tudja járni. Arra nincs idő/pénz, hogy minden egyes ilyen stepX-nek meggyártsam a natív php-s változatát, és intranetes környezetben nem is szükséges. Meg felesleges is lenne két karbantartandó ágat (parancssori/webes) csinálni.
- A hozzászóláshoz be kell jelentkezni
jo, de igy felmerul a race condition amit a kolega is emlitett
- A hozzászóláshoz be kell jelentkezni
/off
mi ez a race conditionos moka?
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
az, hogy állítólag fix paramétereket ad át a programjának. (vagyis a php kimenete egy file, amit a step1 feldolgoz, fix paraméter esetén értelemszerűen ez a file név fix). Ha mocsok akarsz lenni, akkor szimplán párhuzamosan (akár két tabon) két file-t töltesz fel. Ilyenkor mivel azonos a file, a step1 meg minden esetben ugyanabból dolgozik, a második feltöltésnél step1 még dolgozhat, ami nem túl sok jót eredményez;)
- A hozzászóláshoz be kell jelentkezni
kosz, jah ertem hogy a logikaban van gond. eloszor aszittem hogy magara exec fuggvenyhivasra kell figyelni.
(gondolom a step1 lekezeli ottan azt hogyha parhuzamosan futtatjak...)
--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!
- A hozzászóláshoz be kell jelentkezni
"gondolom a step1 lekezeli ottan azt hogyha parhuzamosan futtatjak..."
Most már én is gondolom... :-) Köszi az ötletet.
Amúgy, egyemberes lévén a célközönség, eddig erre nem figyultam... pedig nem ártana.
- A hozzászóláshoz be kell jelentkezni
Miert kene 2 branch (parancssori/webes)? AFAIK PHP megy parancssorban is, egyszer megirod az egy eszkozt, ami mindket modon megjeleniti a kimenetet, es hasznalod mind2 helyzetben. (Jomagam Perl/CGI-ben jopar ilyen toolt ganyoltam ossze.)
--
"It all keeps adding up / I think I'm cracking up / Am I just paranoid? / I'm just stoned"
/Green Day - Basket Case/
- A hozzászóláshoz be kell jelentkezni
Van benne igazság.
Ezzel csak a lustaság+butaság áll szemben, mármint, hogy parancssorban gazdagabb (és általam ismertebb) eszközkészlet áll rendelkezésemre, mint amit PHP-ből ismerek és meg tudok valósítani.
- A hozzászóláshoz be kell jelentkezni
És a legfontosabb: ellenőrzöd, hogy valóban az jött-e meg, amit a kliens állít.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Ezt az egyezést nem egyszerű kitalálni. Egy .csv fájlt lehet text/csv-ként és (mint kiderült; teljesen jóhiszeműen akár) application/vnd.ms-excel dokumentumként is értelmezni. Kliensfüggő a küldött típus. Persze felkészülhetünk több "megfelelőre" is...
- A hozzászóláshoz be kell jelentkezni
Nem erre gondolt. Küldhetek BÁRMIT, miközben azt állítom rá, hogy text/csv.
- A hozzászóláshoz be kell jelentkezni
Nem azt kéne ellenőrizni, hogy az jött-e, amit elvársz a klienstől?
A fenti példánál maradva (ahol a klienstől kapott mime típus alapján lehet, hogy xls fájlról van szó), ha te azt ellenörzöd, hogy a szerver és a kliensek mime fájlja (vagy registry-je!) ugyanazt tartalmazza-e, akkor amint jön egy IE user, azonnal nem használhatja. Vagy a használható mime típusok listája mellett mindegyikhez egy whitelist-et is karban kell tartani, hogy milyen "aliasokat" írhatnak rá a böngészők.
Akkor meg már egyszerűbb csak megnézni szerver oldalon, hogy ténylegesen mi jött a klienstől, a nem megfelelőket visszadobni, hogy hibás fájl, naplózni a hibás fájl típust (és hogy mit hazudott rá a browser), és ha blacklistelt fájltípus jön (pl. akármilyen text #! kezdettel, futtatható bináris stb.), akkor riasztást is küldeni (a visszadobás, és a bizonyíthatósághoz a biztonságos helyre back-upolás után).
BlackY
- A hozzászóláshoz be kell jelentkezni
Vagyis erre gondolsz, nem?
--
Ki oda vagyik, hol szall a galamb, elszalasztja a kincset itt alant. | Gentoo Portal
- A hozzászóláshoz be kell jelentkezni
Jaja, ahogy már fentebb is írtam.
(Gondolom saxus is, csak az ő hozzászólásából következő client.mime(fájl) == server.mime(fájl) nem ugyanaz, mint a server.mime(fájl).in({használható fájllista}))
BlackY
- A hozzászóláshoz be kell jelentkezni
Köszi az információkat!
- A hozzászóláshoz be kell jelentkezni
Bocs, elírtam. Azt ellenőrizzük, hogy azt kaptuk-e, amit vártunk.
(Jelen esetben CSV-t, olyan formátumban, ahogy mi várjuk és nem valami totál mást. Az, hogy a MIME type-ben mi szerepel.... nos, az jelen esetben felesleges adat.)
Soha nem jutott még eszembe a MIME type-al foglalkozni feltöltés esetén, mindig az adatból indultam ki.
----------------
Lvl86 Troll, "hobbifejlesztő" - Think Wishfully™
- A hozzászóláshoz be kell jelentkezni
Szerintem a szerveren a megérkezett fájlt érdemes alávetni egy csv függvényes eljárásnak (fgetcsv pl), ha elhasal, át akarják verni a rendszert.
- A hozzászóláshoz be kell jelentkezni
Tetszik az ötlet! Fogom használni!! :-)
- A hozzászóláshoz be kell jelentkezni
ha elhasal, át akarják verni a rendszert.
Vagy simán felhasználó használja. "De átírtam a kiterjesztését csv-re" :)
BlackY
- A hozzászóláshoz be kell jelentkezni