PHP fájl elérési út védése?
Sziasztok, lenne egy olyan problémám, hogy:
Van egy weblapom, feltudsz tölteni egy fájlt, én ennek a fájlnak a nevét MD5-el titkositom,majd a tmp mappábol atmozgatom a saját mappámba (pl:pdf)
Majd a fájl nevét eltarolom egy adatbázisban (egy sorban a "user" adataival)
Tehát egy letöltő link így néz ki: www.sajatdomain.hu/pdf/md5eltitkositottpdf.pdf
Ezzel a problémám az: ha valaki nagyon unatkozik és nagyon szerencsés (szerencsésebb mint egy lottó nyertes) akkor ezt az md5 hasht ha kitalálja simán letöltheti a kényes adatokat.
Továbbviszem-> nem szerencsés csak okos, tehát bruteforce-al próbálkozik és van elég ideje.
Ti hogyan oldanátok meg, hogy a pdf mappa akkor legyen elérhető csak ha valaki bejelentkezik, továbbá a bejelentkezettnek csak az hash legyen elérhető ami az adatbázisban a saját sorában van?
Előre is köszi :)
Minden hozzáférést letiltasz a feltöltések mappájához (webes mappán kívülre rakod vagy htaccessel blokkolod). Majd írsz egy PHP scriptet ami megkapja $_GET-ben a fájl azonosítóját/hashét, ellenőrzi a jogosultságot és ha minden ok akkor elküldi a fájlt a usernek. Ebben readfile függvény és Content-Disposition header segít ( [link] ). Vigyázz hogy szűrd a bemenetet (pl mindent amit nem betű v. szám kitörölsz pl preg_replace-el) hogy ne tudjon olyat írni valaki hogy pl letolt.php?file=../../../../etc/passwd!
Amúgy nem olyan könnyű azért kitalálni egy md5 hasht főleg ha a végére raksz vmi véletlenszerű adatot mielőtt hashelsz (hogy ne legyen elég a fájlnevet kitalálni), 1.208.925.819.614.629.174.706.176 lehetséges kombináció van.
Ja meg érdemes lehet nem a nevet hanem a tartalmat hashelni, mi van ha sokan töltenek fel pl szamla.pdf-t: [link] Vagy random generálni azonositot.
Elfelejtettem, hogy a fajlnev így tevődik összev
Docnev+1-99999 esőrandom szám, és ezt md5-el titkositom...
Köszi a választ, megy a zöld👍
Más megoldás esetleg valaki?
Amit a Kérdésbe írtál elsőre kedves kérdező arra reagálva : "ha valaki nagyon unatkozik és nagyon szerencsés (szerencsésebb mint egy lottó nyertes) akkor ezt az md5 hasht ha kitalálja simán letöltheti a kényes adatokat."
Ezt kapásból azért tudom hogy nem igaz mert a fájlnévnek az md5-je az jellemző érték, a fájlnévnek a lenyomata ami annyira egyedi mint maga a fájlnév.
"Elfelejtettem, hogy a fajlnev így tevődik összev
Docnev+1-99999 esőrandom szám, és ezt md5-el titkositom... "
Szintén az egyedisége egyenlő a fájlnév egyedisége. Mi szükség van az md5-jére, ez mitől jobb? Kitalálni ugyan annyi mintha az általad ismereten fájlnevet akarnád kitalálni ha nincs módod vagy jogod a fájlok listázására.
Ha jelszavakról lenne szó az más, mert ott nem kell tudni a jelszót a szervernek biztonsági okokból csak azt hogy az e amit megadott.
Az hogy nem tud erről a másik ebből kiindulni rossz stratégia, ezt már tudjuk a történelem folyamán, lásd a vezetékes telefont amikor még a gazdag emberek és a cégek kiváltsága volt , hogy úgy törték fel, hogy annyi volt a védelem benne hogy titkos a működése, így távolról tudtak illegálisan központokat vezérelni otthoni telefonnal mivel kitalálták hogy működik.
Szóval abból kell kiindulni hogy ezt tudja a támadó, hogy így csinálod.
"Ja meg érdemes lehet nem a nevet hanem a tartalmat hashelni, mi van ha sokan töltenek fel pl szamla.pdf-t:"
Láttam már több mint 10 éve egy nagyon frappáns példát, hogy md5-el írta alá a pdf-et a hallgató a professzor úrnak, csak sajnos nem találom. Kitalált példa volt hogy 10 különböző szöveg volt benne de mindnek ugyanaz volt az md5-je. Ráadásul magyarul volt az egész. Ennél jobbat nem találtam most : [link]
2 különböző fájl ugyanazzal az md5-el.
Hiába írtad hogy ennyi variáció van, ettől még lehet ütközést találni a brute force-nál jóval hatékonyabban.
2004-ben a MD5CRK nevű projekt keretében egy óra alatt sikerült ütközést találni egy IBM p690 clusteren (32
darab 1.90 GHz-es processzor, 1 TB RAM).
2005-ben optimalizáltak az algiritmuson, úgy hogy képes lett tetszőleges MD5 hash-hez
ütközést találni néhány óra alatt egy egyszerű laptopon.
2006-ra sikerült lecsökkenteni csupán néhány percre egy
egyszerű laptoppal.
Md5-el validálni hogy volt e ez a fájl az egy egyoldali hibás Monte Carlo módszer, ha nincs ilyen hash-ű akkor biztos hogy nem volt, ha van akkor valószínűleg volt már. Mindenképpen egy gyorsítás ha így ellenőrizzük amit ki lehet használni, megokosítva úgy hogy ne hibázzon ütközés esetén se. Úgy hogyha megegyezik az md5-je akkor hasonlítja össze.
"Innentől a biztonság már csak attól függ, hogy ezt a modult jól írod-e meg."
Meg attól, hogy a keretrendszer mennyire jól van megírva amit felhasznál, meg a webszerver ahol fut az mennyire jó biztonsági szempontból meg mennyire erős jelszót használ az admin, meg ennyire biztosnágos a user gépe, hozzáállása (hülyeség ellen nem véd) ... etc. Mind közül hogy mennyire van biztonságban az adott fájl a leggyengébb láncszem függvénye lesz.
#utolso
Hazaèrek munkából, és megemésztem amit írtál...
Köszi a segítséget:)
Utolsó vagyok.
Igen, az első hsz-nak a válasza a helyes. Bocsi azt nem figyeltem (fáradt vagyok).
Erre én írtam egy apit épp 1 hónapja, mert pl a képek a böngészőben alapértelmezés szerint meg jelennek. De a videó adatfolyamhoz is kellett épp a jogosultságok ellenőrzéséhez. A fájlok könyvtárát meg véletlenül se tedd a public mappán belülre.
En moge biggyesztenem a user id-jet pl.
/user/33/pdf/hash.pdf. muszaj publikus urlnek lennie? Ha nem akkor elotte autentikalj. Millio variacio van. A feladat ismerete nelkul nehez igy. Ha a 33as userrel valaki sokat kekeckedik mondjuk 50 request/perc akkor throttlinggal kiloheted parkolni mondjuk negyed orat ip alapjan.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!