ugrás a tartalomhoz

fájlfeltöltés, biztonságosan

ErdosJ · 2007. Dec. 4. (K), 21.12
sziasztok
ez a kerdes a jatekomtol fuggetlen, egy kiserlettel kapcsolatban botlottam bele.
tehat meg szeretnem oldani, hogy a felhasznalo bongeszojen keresztul fileokat tolthessen fel (ajaxos gui), konyvtarakat, fileokat hozhasson letre, torolhessen, masolhasson, mozgathasson. eddig tiszta sor, ilyen (php) scriptekbol sokmillio van az interneten is.
ott akadtam el, hogy nem tudom, hogyan lehetne megoldani, hogy a felhasznalo bizonyos mappakat csak jelszoval erhessen el, sot, ne lehessen torolni olyan konyvtarakat/konyvtarszerkezeteket, amikben jelszoval vedett tartalom/konyvtar van, vagy jelszoval vannak levedve. a masik problemam az, hogy nem szeretnem engedelyezni, hogy a feltoltott php kiterjesztesu fileok lefussanak :) tudom, hogy a jogosultsagok, chmod erre valo, de a sajat szerveremen valamiert nem mukodik.
ti hogyan allnatok neki?
valaszaitokat varom
ErdosJ
 
1

első

ErdosJ · 2007. Dec. 4. (K), 21.15
en eddig ugy alltam neki, hogy a bongeszo egyetlen egy darab php scripttel kommunikal, annak osztja a parancsokat, onnan kapja a jelenlegi konyvtarlistat, informaciot fileokrol, stb...
a jelszavazast pedig ugy kepzeltem el, hogy minden uj konyvtarba teszek egy .htaccess filet, ami tartalmazza a lehetseges jelszavakat, sot, felszolitja a szervert, hogy a php allomanyokat ne kezdje el futtatni.
itt viszon hatalmas problemaba utkozom akkor, ha konyvtarszerkezeteket kell torolnom, athelyeznem, masolnom.. ilyenkor rekurzivan be kene jarnom a konyvtarszerkezetet, vagy van egyszerubb megoldas is?
8

nem publikus konyvtar

gonoszcsiga · 2007. Dec. 6. (Cs), 00.47
en ugy csinaltam, hogy egy nem publikus konyvtarba, a useridnek megfelelo alkonyvtarba tolthettek fel fajlokat, es egy php scripten keresztul lehetett csak a fajlokat elerni, mondjuk nalam csak nehany fajlorol volt szo, semmi konyvtarszerkezet.
evvel szerintem megoldodik a php fajlok tiltasa is, leven a webrol nem elerhetoek.
"minden uj konyvtarba teszek egy .htaccess filet, ami tartalmazza a lehetseges jelszavakat"
ezt a jelszavas dolgot nem ertem teljesen, hogy mire kell tobb jelszo.
2

második

ErdosJ · 2007. Dec. 4. (K), 21.17
egy masik megoldast valamikor regen lattam egy kepfeltolto scriptnel..
arrol szolt, hogy a feltoltott allomanyokat nem tenylegesen, valodi konyvtarakba menti, hanem adatbazisokban tarolja, onnan hivja elo..
ez mennyire jarhato ut?
3

Adatbázisba tenném

zila · 2007. Dec. 4. (K), 22.05
Ha nem az a cél, hogy valódi filekezelőt írj (amivel aaz akár ftp-n feltöltött fileokat is tudod onilne bizergálni) akkor az adatbázisban tárolás jó megoldás. Megoldja a jogosultságkezelést, a php futtatás/nem futtatás problémát. (Mellesleg a chmod nem gátolja meg az apache-ot abban, hogy futtassa a php fileokat, a chmod csak a parancsori futtatásra ad megoldást. Persze leveheted az olvasási jogot a fileokról, de akkor a te scripted sem fogja látni azokat, mivel az az apache userével fut...)

Adatbázisban tároláshoz egy egyszerű fát kell készítened, a mikéntekről olvasd el a Hierarchikus adatkezelés cikket itt a weblaboron :)

A strukturát mintázhatod a unix filerendszerről, én két táblába szervezném:
fs_table:
id, parent_id, type, mime-type, owner, group, permissions, status, ctime, atime, mtime, size, name

fs_content:
id, fs_table_id, content

Ha linkelést (symlink, hardlink) is szimulálni akarod, kell még egy tábla minimum de ezt most hagyjuk szerintem :)

Azért két tábla, mert így rugalmasabban pakolgathatod a file tartalmakat tartalmazó tábla mehet külön tablespace-be pl. he verziózni szeretnéd a fileok tartalmát akkor így egyszerűbb lesz, a linkeléshez is jól jön ez a struktúra...

Hát valahogy így állnék neki. Érdemes átgondolni, hogy egyszerű fa vagy nested-set típusú fában érdemes-e inkább tárolni a "filerendszert"...
4

Re: Adatbázisba...

ErdosJ · 2007. Dec. 5. (Sze), 18.10
hmm... szerettem volna az adatbazisozast elkerulni, de lehet, hogy megis ez lesz celravezeto. valojaban a kiserletem lenyege az lenne, hogy minel minimalisabb kornyeztetben futhasson.
egyeb otlet?
5

blob

ErdosJ · 2007. Dec. 5. (Sze), 18.30
hehe.. most nezem, hogy a blob tipus 16mb-ig mukodik..
6

Csomagkorlát

janoszen · 2007. Dec. 5. (Sze), 19.25
Előbb fogsz belefutni a MySQL csomagok méretkorlátjába. Egyébként javaslom, hogy _ne_ töltsetek MySQL-be a csomagkorlátnál nagyobb fájlokat, mert iszonyatosan nagyokat lehet vele szívni ha migrálni kell a DB-t.
7

Blob méret

zila · 2007. Dec. 5. (Sze), 23.15
MYSQL: LONGBLOB: 2^32 or 4294967296 bytes (4 GiB) http://rentadev.net/showthread.php/increase-max-blob-95412/index.html?s=26c0b68772600dbb97cdf9a027ad1da0&
postgres: 1 GB
firebird: 32 GB

http://www.amsoftwaredesign.com/pg_vs_fb

Persze azt is lehet csinálni, hogy a file-t nem blob-ba teszed hanem filerendszerbe és csak egy hivatkozást helyezel el a táblában ill. a filenevet/elérési utat tárolod el. A fileokat pedig a webrooton kívüli könyvtárba teszed, így nem érik el a webről.