Stránka: 1 z 1
| [ Príspevkov: 26 ] | |
| Autor | Správa |
|---|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14571 Témy: 66 | 66 Bydlisko: Žilina |
Zdravicko, takze...
po dlhsom hladani sa mi zatial nepodarilo najst uspokojivu odpoved, tak mozno tu sa niekto najde. Pisem klasicku funkciu pre zobrazovanie adresarov v php.. Vsetko je fajn, funguje mi to aj pred podadresare donekonecna, mam vsak taky problem, ze ked uz sa teda preklikam do napr nakej tretej urovne, a chcem ist teda o uroven spat, tak neviem ako na to. Istym riesenim sa ukazalo pouzit toto :
Kód: <a href="javascript:history.go(-1)"><img src="../../images/upfolder.gif"></a>
avsak robi to mensie problemy, kedze prehliadanie adresarov nie je jedina vec, ktoru s nimi chcem robit. mam napriklad dalsie funkcie pre editovanie suborov, pridavanie adresarov a podobne, kedy, pochopitelne, spravi tento javascriptovy prikaz minimalne otravne viacnasobne klikanie a az potom logicky vykona co chcem.
Ked som dal zobrazovat "." a "..", a skusil pouzit, dokazal som sa pomocou tohto skriptu dostat az do windowsovej zlozky, a to si myslim nepraje ziaden programator, aby sa mu uzivatel dostal do adresarovej struktury mimo vyhradeny priestor
Kto by mi vedel poradit ako to urobit? Vopred diky...
_________________ C#, PHP, ... |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
nechapem, co s tym ma history.go a vobec preco si to pouzil, je mi velkou zahadou... sak ked pridem rovno do nejakeho podadresara a chcem sa dostat o uroven vyssie, tak ti to nepojde...
v php mas funkcie na pracu s adresarmi, cize aj na zmenu aktualneho pracovneho adresara, staci ich vhodne pouzit a skombinovat... co sa tyka prechadzania celej adresarovej struktury pouzivatelom, tak to staci obmedzit na rodicovsky adresar, ku ktoremu ma pristup a v ramci ktoreho sa moze pohybovat... alebo proste len zakazes adresare, ku ktorym sa nema dostat...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14571 Témy: 66 | 66 Bydlisko: Žilina |
stenley píše: nechapem, co s tym ma history.go a vobec preco si to pouzil, je mi velkou zahadou... sak ked pridem rovno do nejakeho podadresara a chcem sa dostat o uroven vyssie, tak ti to nepojde...
v php mas funkcie na pracu s adresarmi, cize aj na zmenu aktualneho pracovneho adresara, staci ich vhodne pouzit a skombinovat... co sa tyka prechadzania celej adresarovej struktury pouzivatelom, tak to staci obmedzit na rodicovsky adresar, ku ktoremu ma pristup a v ramci ktoreho sa moze pohybovat... alebo proste len zakazes adresare, ku ktorym sa nema dostat...
tak to by si sa asi moc cudoval, ale ono ten kod funguje  mam to spravene tak, ze to funguje...
ano, su tam nake tie funkcie, ale nak sa neviem vysomarit, ako sa pohybovat o uroven spat. viem ze je to blbo riesene
ked som chcel dal prec Kód: if ($object != "." && $object != "..") , tak sa samozrejme dalo pohodlne presuvat, ale z url mi to robilo asi nieco taketo : Kód: /admin.php?p=subory&dir=Metodicke_pokyny/./../Metodicke_pokyny/././.
seriem sa s tym uz prilis dlho a dochadzaju mi napady. najviac ma stve, ze aj ked si dokazem zobrazit pomocou readdiru obsah vsetkych adresarov a suborov a nasledne o tom vybrat podrobnosti z mysql, tak neviem ako robit zoradenie vypisu podla vybraneho stlpca, z pochopitelneho dovodu.
najskor by bolo asi fajn pozriet do mysql, nasledne porovnat s vypisom readdiru a postupne to vypisovat do tabulky, avsak tu mi kod opat zlyhava a mam chut dat shift+del na cely 300riadkovy subor...dakde na nete som nasiel radu strcit ziskane udaje z readdiru do pola, to sortovat a nasledne si s tym uz robit co sa mi zapaci, avsak neprisiel som zatial na to, ako sortovat pole podla vybraneho stlpca z mysql...
a ANO, viem ze vsetko robim obklukami a mozno zbytocne zlozito  bohuzial sa vsetko ucim sam a robim ako viem..
_________________ C#, PHP, ... |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
hmm, no mohol by si si ukladat cestu k aktualnemu adresaru do session a tym padom by ti stacilo v url uvadzat len nazov adresara, do ktoreho sa chces dostat (alebo v ktorom sa prave nachadzas), pripadne len ".." ci "."
Ak by to bolo "..", tak by si z hodnoty v session "ukrojil" jeden adresar, nastavil zvysok ako aktualny a fungovalo by to bez problemov... V pripade, ze sa chces dostat do podadresara, tak by si len pridal novu uroven...
S tym sortovanim som nepochopil, co presne chces docielit, takze k tomu sa zatial nevyjadrim...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14571 Témy: 66 | 66 Bydlisko: Žilina |
stenley píše: hmm, no mohol by si si ukladat cestu k aktualnemu adresaru do session a tym padom by ti stacilo v url uvadzat len nazov adresara, do ktoreho sa chces dostat (alebo v ktorom sa prave nachadzas), pripadne len ".." ci "." Ak by to bolo "..", tak by si z hodnoty v session "ukrojil" jeden adresar, nastavil zvysok ako aktualny a fungovalo by to bez problemov... V pripade, ze sa chces dostat do podadresara, tak by si len pridal novu uroven...
S tym sortovanim som nepochopil, co presne chces docielit, takze k tomu sa zatial nevyjadrim...
to browsovanie skusim zajtra, nemam to doma v pc...
co sa tyka sortovania, tak ide o to, ze mam o kazdom adresari ci subore ulozene nejake informacie, ktore taham z mysql.. mam to pekne cele vypisane v tabulke a funguje to, akurat dakto pride a bude chciet napriklad zoradit subory podla typu, alebo podla nazvu a podobne.. proste podla nejakeho stlpca v mysql. lenze teraz to nejde z toho dovodu, ze najskor vyberam postupne fciou readdir obsah adresarov a potom o nich ziskam info. cize nemam ako pouzit SELECT * FROm ... SORT BY .... atd, lebo vzdy vyberiem len ten jeden zaznam z mysql a tam sortovat neni co
_________________ C#, PHP, ... |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ked mas o kazdom subore a adresari ulozene info v db, tak na co potom citas obsah adresara cez readdir? nestacilo by ti to rovno vypisovat uz v zoradenom poradi z db?
alebo ak nie, tak by bolo najvhodnejsie asi fakt pouzit to pole a zoradit to pomocou usort (uasort,uksort), nic ine mi teraz akosik nenapada...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14571 Témy: 66 | 66 Bydlisko: Žilina |
stenley píše: ked mas o kazdom subore a adresari ulozene info v db, tak na co potom citas obsah adresara cez readdir? nestacilo by ti to rovno vypisovat uz v zoradenom poradi z db?
alebo ak nie, tak by bolo najvhodnejsie asi fakt pouzit to pole a zoradit to pomocou usort (uasort,uksort), nic ine mi teraz akosik nenapada...
1.) sortovanie je uz spravene  dik za napad, neviem preco som to robil hentak...
2.) mozes byt prosim konkretnejsi ako na to "browsovanie o uroven vyssie" ? rozumiem principu co si opisal, akurat ma nenapada ako to presne napisat aby to fungovalo 
_________________ C#, PHP, ... |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ked mas vsetko ulozene v db, tak session vobec nepotrebujes, uplne ti postaci pracovat s datami ulozenymi v db - pravdaze, ak mas spravne zvolenu strukturu, z ktorej vies jednoducho zistit rodicovsky adresar, podadresare a aj subory nejakeho adresara...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14571 Témy: 66 | 66 Bydlisko: Žilina |
stenley píše: ked mas vsetko ulozene v db, tak session vobec nepotrebujes, uplne ti postaci pracovat s datami ulozenymi v db - pravdaze, ak mas spravne zvolenu strukturu, z ktorej vies jednoducho zistit rodicovsky adresar, podadresare a aj subory nejakeho adresara...
tak mam klasicky info o subore + ukladam aj informaciu o type (adresar, word, excel atd) + informaciu kde sa nachadza subor stylom "../files/" (to je vlastne hlavny adresar), "../files/ideme_hlbsie/" atd...
mozes to prosim skonkretnit ? ako vravim, priblizne principu rozumiem, ale nak zlyhava realizacia lebo si to nak neviem pretransformovat do php 
_________________ C#, PHP, ... |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
aha, tak to bude zlozitejsie, ked mas cesty ulozene v "celej dlzke", myslel som si, ze to budes mat v jednoduchsej a pouzitejnejsej podobe... no newa, takze session je predsa len vhodnejsie riesenie... Ked si sem prvykrat daval tento problem, tak som si to pre istotu aj nakodil, aby som nahodou netrepal blbosti, ale medzicasom som to uz vymazal, takze ti napisem len zakladne kroky:
1. inicializujes si session premennu root adresarom
2. meno cieloveho adresara si budes chciet asi uchovat v GET - toto meno moze byt meno podadresara alebo "." pripadne ".."
Ak to bude "..", z cesty v session odstranis posledny vyskyt "/nejaky_adresar" a vzniknutu hodnotu nastavis ako aktualny pracovny adresar a zobrazis v usporiadanom poradi jeho obsah z db
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Osobne som si na prehliadanie adresárovej štruktúry kedysi napísal tiež vlastný skript, aby som mal localhost prehľadnejší. Cestu som zobrazoval štýlom: Kód: http://www.example.com/?show=adresar/podadresar/podpodadresar Návrat o úroveň vyššie som riešil jednoducho tak, že som rozobral aktuálnu cestu pomocou explode cez "/" a odstránil poslednú časť. Kód: $pole = explode("/", $_GET["show"]); foreach ($pole as $cast); $back = str_replace("/$cast", "", $_GET["show"]); echo "<a href='./?show=$back'>späť</a>";
Použitie ".." som jednucho zakázal v premennej show použiť, tak sa nik nedostal o úroveň vyššie ako bol skript.
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14571 Témy: 66 | 66 Bydlisko: Žilina |
dobre, dakujem za rady, skusim vyskusat a pripadne sa ozvem 
_________________ C#, PHP, ... |
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
jj, da sa to riesit viacerymi sposobmi, ale princip je vzdy rovnaky - odstranenie poslednej adresarovej casti cesty, aby si sa dostal o urovej vyssie... len treba davat pozor na to, aby sa nedali zadavat absolutne cesty, preto je aj lepsie nezobrazovat celu cestu v GET (navyse, dlzka url je tiez obmedzena)
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Absolútnej ceste sa dá tiež jednoducho zabrániť, tak že zakážeš aby výraz začínal /, a zároveň aby neobsahoval 2 bodky "..". Dĺžka url je obmedzená, avšak pokiaľ nepotrebuješ prechádzať obrovské adresárové štruktúry, je to dostatočné.
Inak takto nejako vyzerá môj localhost: http://mylan.yw.sk/ (zabudol som heslo na tento yw účet, tak je tam nejaká staršia verzia skriptu), tu je kód skriptu: http://mylan.yw.sk/show-source.php?file=index.php
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
mas tam adresare root a www, vsak? mas to bohovsky "zabezpecene", dostal som sa do nich 
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Ešte raz... okrem toho, že to je to stará verzia skriptu(môk localhost už vyzerá uplne inak). Hodil som to na ic.cz len zo srandy niekedy, inak to nikdy nebolo určené pre public. Bolo to vždy určené len pre môj localhost, takže na akékoľvek zabezpečenie som sral. Je to určené len a len pre môj localhost. Ak by som robil nejaký priezkumník, ktorý by som uvoľnil, alebo dal na nejaký môj web, urobím ho úplne inak predsa. V tomto nie sú ošetrené ani 2 bodky(..), ani absolútna cesta čo som spomínal...
toto nikdy zabezpečené ani nemalo byť. Je mi jedno kto čo uvidí na adrese mylan.yw.sk, sám tam už nemám ani prístup ako som písal, vždy to bol len môj absolútne verejný test web.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ok, tak sorry  ale nechapem, preco zverejnujes tento nezabezpeceney skript, na co to je dobre?
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 17.10.06 Prihlásený: 08.01.11 Príspevky: 1752 Témy: 17 | 17 |
tak napriklad ja som si davnejsie tiez napisal podobny skript, ktory bol voci takymto chybam tiez nezabezpeceny, avsak zamerne. nikdy nevies kedy sa ti nieco take moze hodit 
_________________ A Real Programmer might or might not know his wife's name. He does, however, know the entire ASCII code table. |
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
je to zverejnené na stiahnutie niekde? Dal som to sem ako ukážku, ako som riešil výpis adresárov, a ako je riešené návrat o krok späť, nič iné. Ostatné som vysvetlil teoreticky ako skript zabezpečiť v prípade, že ho chceš zverejniť.
Mimo toho, ten skript na ic.cz je absolútne bezpečný. Dostal si sa do adresára root a root/www. Čo ďalej?
Bolo to tam hodené najmú aj preto, lebo mi bolo jedno kto sa kam pozrie, vždy som tam hádzal odpad, čo som nemal kde dať, až kým som stratil heslo na ic a zistil, že som tam uviedol nejaký mail, čo neviem 
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
zverejnil si zdrojovy kod skriptu (link na neho), takze nechapem tvojej otazke...
nedostal som sa vyssie preto, lebo to je zabezpecene "serverom" a nie tvojim skriptom, cize vyhlasenie, ze tvoj skript je absolutne bezpecny, je velky omyl... a navyse, ked skript vypise nejaku neosetrenu chybu, tak sa stava potencialne nebezpecnym...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 07.03.06 Prihlásený: 23.01.11 Príspevky: 404 Témy: 2 | 2 Bydlisko: Prešov / Pr... |
Ok, mal som tu dať len časti potom toho kodu, aby som nezmiatol začiatočkníkov, ktorý to môžu potencionálne okopírovať celé. Len zhrniem: kod som tu dal na ukázanie prechádzania ciest, povedal som ako to zabezpečiť. Tento je určený len na môj comp(resp bol, používam inovovanú verziu, avšak taktiež nezabezpčenú na prehliadanie vyššie, kedže mi to netreba), na tento web, na ktorom je bezpečný. Ale inak predstavuje potencionálne riziko, je potreba ho doupraviť ako som naznačil v prvom a druhom svojom príspevku v tejto téme.
Základ má slúžiť parsovanie cesty, návrat o úroveň vyššie... Inak pre "explorer" na web by som skúsil aj napríklad http://uploader.kahi.cz/ a ním sa inšpirovať.
PS: to na ic.cz že je bezpečný som myslel s nadsázkou... Je to samozrejme kvoli nastaveniu servera, ale nič to nemení na mojej vete.
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
ok, ked to zoberiem ako ukazku principu fungovania, tak nemam voci tomu vyhrady, ale na verejnu prevadzku je to potrebne este doladit, ako si aj ty poznamenal...
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
čo presne potrebuješ ...
nedostať sa za danú zložku alebo dostať sa späť o jednu zložku?
|
|
Registrovaný: 24.01.08 Prihlásený: 13.09.17 Príspevky: 14571 Témy: 66 | 66 Bydlisko: Žilina |
Tominator píše: čo presne potrebuješ ... nedostať sa za danú zložku alebo dostať sa späť o jednu zložku? to co tu uz riesili stenley s mylanom... mas normalne poriesene chodenie po priecinkoch, ale nemam este dokonceny pohyb o uroven vyssie s tym, ze samozrejme treba limitovat pokial ist mozes. nie som teraz v praci tak to moc nemam ako skusat, ale zajtra by som rad rano vyskusal to co spominali.. orezavanie url o jednu uroven spat, tak som zvedavy jak to pojde 
_________________ C#, PHP, ... |
|
Registrovaný: 21.02.07 Prihlásený: 21.02.10 Príspevky: 3984 Témy: 96 | 96 |
jj ja to robim cez explode teda to rozdeľujem na polia ... a máš $_SERVER['PHP_SELF']; myslím kde zistíš tvoj priečinok teda ak si na localhost/Ahoj/index.php vypíše /Ahoj/index.php čo sa samozrejme zíde ...
|
|
Registrovaný: 27.07.07 Príspevky: 3948 Témy: 51 | 51 Bydlisko: Bratislava |
Pre nazornost vyuzitia session pri prechadzani adresarovej struktury (nie z db), uvadzam nasledujuci skript. Pre jednoduchost vypisuje len adresare a ziadne neskryva.
Premenna $rootDir obsahuje adresar, ktoreho obsah ma byt default zobrazeny pri spusteni skriptu a v ramci ktoreho sa moze pouzivatel pohybovat - vyssie sa uz nedostane. Cize, ak by bol skript ulozeny v adresari "web" a chceme spristupnit len obsah jeho podadresara "files", tak je potrebne upravit $rootDir nasledovne:
Kód: $rootDir = dirname($_SERVER["SCRIPT_FILENAME"]).$_delimiter."files"; //k povodnej hodnote sa teda pridala dalsia uroven .$_delimiter."files" Samotny skript bez predchadzajucich zmien: Kód: <?php session_start();
$_delimiter = "/"; $_delimiter2 = "\\"; if(strpos(getcwd(),$_delimiter)===false) { $tmp = $_delimiter; $_delimiter = $_delimiter2; $_delimiter2 = $tmp; }
$rootDir = dirname($_SERVER["SCRIPT_FILENAME"]); $rootDir = str_replace($_delimiter2,$_delimiter,$rootDir);
$_SESSION['currentDir'] = !empty($_SESSION['currentDir']) ? $_SESSION['currentDir'] : $rootDir;
if(!empty($_GET['dir'])) { $showDir = ereg("[\/]",urldecode($_GET['dir'])) ? "." : urldecode($_GET['dir']); switch($showDir) { case ".": break; case "..": $tmp = substr($_SESSION['currentDir'],0,strlen($_SESSION['currentDir'])-strlen(strrchr($_SESSION['currentDir'],$_delimiter))); if(strlen($rootDir)<=strlen($tmp)) { $_SESSION['currentDir'] = $tmp; } break; default: if(is_dir($_SESSION['currentDir'].$_delimiter.$showDir)) { $_SESSION['currentDir'] .= $_delimiter.$showDir; } } } else { $_SESSION['currentDir'] = $rootDir; }
if(strpos($_SESSION['currentDir'],$rootDir)!==false) { chdir($_SESSION['currentDir']); $dir = opendir($_SESSION['currentDir']); while($file = readdir($dir)) { if(is_dir($file)) { echo '<a href="?dir='.$file.'">'.$file.'</a><br>'; } } } ?>
Ak tam najdete nejaku chybu, dajte pls vediet. D.
_________________ NTB: Acer Aspire 4820TG 14" | CPU: Intel Core i5 2,53 GHz | VGA: ATI Mobility Radeon HD5650 1GB | RAM: 8GB DDR3 1066 MHz | HDD: 1TB SSD WD BLUE |
|
Stránka: 1 z 1
| [ Príspevkov: 26 ] | |
|