Adott egy web interface, ahol a user fájlt tud letölteni linkekről. A fájl letöltést POST kéréssel csinálom, mert azonosítom a user-t (be van jelentkezve). Sima GET nem jó, mert biztonságilag nem elfogadható.
Minden asztali böngészővel jól működik, Android-on meg csak Operával. Azért csak ezzel, mert Opera beépített letöltés kezelővel jön, az összes többi meg nem.
A probléma a következő: a letöltendő fájl linkjét a böngésző átadja a letöltés kezelőnek, aki GET-tel tölti le. Így a fájl tartalma a html kimenet lesz a kiküldött fájl tartalom helyett. Nagyon gáz, net szerte anyáznak miatt sok bejegyzéssel. Pl.:
https://code.google.com/p/android/issues/detail?id=1780
https://code.google.com/p/android/issues/detail?id=1780#c40
google://android browser download with post request
Más is belefutott már ebbe? Lenne valamilyen megoldás mégis POST request-tel?
(iOS-en állítólag ez nem áll fenn, de még tesztelnem kell bővebben. iPhone 4 alatt nem történik semmi a linkre tapizva, de lehet csak nem értek hozzá. Ott feldob valamit ha jön fájl? Vagy csendben letölti egy mappába?)
Előre is kösz!
- 6836 megtekintés
Hozzászólások
Ha más nem, generálsz egy átmeneti letöltési URL-t amire átirányítod, és az feltehetőleg menni fog.
- A hozzászóláshoz be kell jelentkezni
Sima GET kérés sajnos nem megengedhető.
- A hozzászóláshoz be kell jelentkezni
Bejelentkezés még POST-al menne, ekkor generálnál egy linket egy hash-el, amire a átirányítanád a usert.
A hashelt linken meg valami egyszerűbb php lökné a fájl tartalmát a megfelelő header-el.
A letöltés megkezdésekor a hash link érvénytelenné válna.
Ebben én nem látok biztonsági kockázatot.
------------------
My Open-Source Android "Projects"
- A hozzászóláshoz be kell jelentkezni
Ha az egyszer használatos link kifelé kimegy, de nem jön létre a kapcsolat a szerverrel, akkor a letöltendő fájl szabadon elérhető marad, és mivel a link keresztül megy a DNS szervereken és ISP-ken keresztül az összes átjárón, ezért ez semmiképp sem jó megoldás.
- A hozzászóláshoz be kell jelentkezni
Ha nem használsz https-t, akkor a POST sem megoldás arra, hogy ne nyúlják le a linket útközben (mondjuk a DNS nem is fog vele találkozni :)
Ha valami biztonságosabbat akarsz, akkor tarts az Androidon egy kulcsot, azzal csinálj egy disgestet a linkből, fűzd hozzá a GET-hez nyugodtan, és a szerver meg ellenőrízze.
- A hozzászóláshoz be kell jelentkezni
Persze hogy használok https-t. A sima link is lehet https-es, attól még más is le tudja tölteni vele a fájlt, ha nincs auth-hoz kötve. A kettőnek sajnos nincs köze egymáshoz ebből a szempontból.
Amit javasolsz, az sem jó authentikáció helyett.
- A hozzászóláshoz be kell jelentkezni
Bocs, nem figyeltem, hogy browser, csak arra, hogy fejlesztés topic...
Ha viszont browser, akkor a cookie miért nem jó?
Vagy alternatív eset, ha nagyon nem akarsz cookie-t: POST-tal az auth, visszajön válaszban egy HTML redirect, ami lekérésére mondjuk adsz egy 10 mp-es időablakot a szerveren, plusz még ellenőrizheted az IP-címet is.
- A hozzászóláshoz be kell jelentkezni
Nem jók ezek a trükközések ablakot hagyva támadási felületnek. Ha odáig jut egy dolog, hogy "xy tanút kérem meghallgatásra", és felteszik az egyenes kérdést, hogy tudatosan hagyott a technológia tervezésekor támadható felületet? Akkor mindegy mi az eredeti ok, ha nem tudsz nem-mel válaszolni, megszívtad. Ilyet nem szabad beletervezni.
Azért kösz az ötleteket, még keresem a jó megoldást. Operával megy, de azért így még nem kerek.
- A hozzászóláshoz be kell jelentkezni
Jut eszembe: http auth nem játszik?
- A hozzászóláshoz be kell jelentkezni
Mi a baj a cookie-val?
- A hozzászóláshoz be kell jelentkezni
Másik szerver szolgálja ki a fájl kérést.
- A hozzászóláshoz be kell jelentkezni
Tudok nemmel válaszolni.
Ugyanis ennyi erővel azt is lehet mondani, hogy végső soron ráhibázhat valaki simán a szerveremhez szüksége 2kbites kulcsra és kb. 200 bites jelszavamra. Egy 4-500 karakteres URL ezzel kb. egyenértékű. (Ráadásul 10 mp-nél és egy próbálkozásnál ennek mennyi az esélye?)
(Egy ismert URL és POST-tal elküldött név/jelszó a fentihez képest egy tágra nyitott gyárkapu.)
- A hozzászóláshoz be kell jelentkezni
A ráhibázásnak van esélye, csak nagyon kicsi és tömegesen nem kihasználható.
A 10 mp-nél és 1 próbálkozásnál meg nem az esély a probléma, hanem hogy visszatérően minden egyes letöltéshez megadod ezt az esélyt. Főleg úgy, hogy ha a kérés kimegy a klienstől (itt ugye az url végig megy a neten) és nem sikerül eljutni a szerverig, máris ott a lehetőség bárkinek a letöltésre bármiféle nehézség nélkül. Ezt súlyosbítja a tény, hogy minden egyes művelethez adsz egy ilyen esélyt a támadónak, mely akár több száz vagy ezer lehetőség per nap. Szerintem nagyon rossz megközelítés.
Https-en POST kéréssel végzett kommunikáció miért lenne nyitott?
- A hozzászóláshoz be kell jelentkezni
https-en a GET URL is titkositva megy. A DNS feloldasban csak a domain szerepel.
- A hozzászóláshoz be kell jelentkezni
Nekem úgy rémlik több helyen azt olvastam doksikban is, hogy https-en csak a post biztonságos. Ennek most utána nézek, mert ha ez így van, akkor én tudom rosszul.
- A hozzászóláshoz be kell jelentkezni
Egyelőre felemás véleményeket látok pl itt:
http://stackoverflow.com/questions/2629222/are-querystring-parameters-s…
- A hozzászóláshoz be kell jelentkezni
A lenyeg az, hogy tartosan titkos informaciot nem szabad benne kuldeni, mert azt a kliens oldalon a bongeszo kiirja, a szerver oldalon pedig bekerulhet a logba. A koztes eszkozok szamara tovabbra is titkos. Tehat ha egy ideiglenes kulcsot generalsz es azt rakod a GET-be akkor az elfogadhato. Termeszetesen biztonsagi dokumentacioba erdemes feltuntetni, hogy ilyen fajta logolast nem szabad bekapcsolni a szerveren.
- A hozzászóláshoz be kell jelentkezni
Világos, de ez nekem akkor nem lesz jó, mert olyan URL-eket generálok, melyeknek akárhány alkalommal kell működniük. Ez a szolgáltatás tulajdonsága miatti igény sajnos.
(Több azonos csoportban lévő felhasználó feltolhat fájlokat a fájl szerverre, melyhez vissza kapnak egy URL-t és ez tárolódik le az adatbázisukban. Ezért kell többször felhasználhatónak lenni, ráadásul megosztottnak a csoporton belül, de úgy, hogy simán kikopizva a link-et más user ne tudjon hozzáférni a fájlhoz.)
Marad a minden egyes alkalommal való auth post-on keresztül akkor. Kérdés létezik-e jó harmadik lehetőség?
- A hozzászóláshoz be kell jelentkezni
POST utan redirect az uj GET-es cimre ami egyszer hasznalhato es akkor is csak limitalt ideig. Igy van tartos cimed, de a letoltes megis GET.
- A hozzászóláshoz be kell jelentkezni
Épp ez a gond, hogy az Android-os bug miatt elvileg soha nem tud POST kérés menni, mert a letöltés kezelő átveszi a linket és csak GET-tel megy neki. Ez "minden" böngésző esetében, kivéve Opera, amely saját letöltés kezelőt használ.
- A hozzászóláshoz be kell jelentkezni
Mint fentebb írtam: nem HTTP redirect (301), hanem HTML redirect (meta http-equiv="refresh" content="0; url=http://...").
- A hozzászóláshoz be kell jelentkezni
De attól még nem megy el a POST-ban küldendő auth paraméter.
- A hozzászóláshoz be kell jelentkezni
Miért?
- A hozzászóláshoz be kell jelentkezni
Itt egy vélemény hogy miért nem jó ötlet:
http://stackoverflow.com/a/643480
- A hozzászóláshoz be kell jelentkezni
Esetedben szerintem egyik sem jatszik:
1. nem kuldod emailben
2. az URL nem tartosan ervenyes
3. a link egy letoltheto fajlra mutat, tehat onnan nincs referer tovabb es ha lenne akkor is ervenytelen lenne a link mivel mar megnyitottad
- A hozzászóláshoz be kell jelentkezni
Majdnem azt hittem jó lesz, de sajnos ahogy feljebb írom, tartósan működőnek kell lennie a linkemnek csoporton belüli több user-rel való megosztás miatt.
- A hozzászóláshoz be kell jelentkezni
Szóval, nem fejtettem ki részletesen, de:
1. Belép a felhasználó, van joga a fájlhoz
2. Van egy link, ami a fájlt azonosítja (egy rövid url, amit még a programod ellenőriz). Ezt fogod a csoportban terjeszteni mint link.
3. A linkre lépéskor a rendszer generál egy egyszeri URL-t, amelyet IP címhez kötsz, és egyszeri alkalommal teszed elérhetővé (ha pedig nem használják fel a linket, elévül X időn belül). Erre irányítod át a klienst.
3+1. Tehetsz még bele HTTP Auth-ot, amit szintén az átirányításnál adsz át, és egyedileg generálódik egy letöltés erejéig.
Hol van itt a biztonsági rés HTTPS felett? Csak szerver oldalon és kliens oldalon lehet kompromittálni ezt (figyelmen kívül hagyva most a MITM támadásokat).
Ebből a szempontból a POST semmivel sem jobb mint a GET.
- A hozzászóláshoz be kell jelentkezni
blr is ezt mondja. Végig gondolom.
Köszi mindenkinek a hozzászólásokat. Megírom majd hogy mire jutottam.
- A hozzászóláshoz be kell jelentkezni