« 1 2 »
Autor Zpráva
rkomoras
Profil
Zdravím, potřebuji pomoct s výpisem souborů z adresáře i s možností jejich smazání. A pokud možno také s velikostí a datem uploadu. Předem díky za radu.
Nox
Profil
třeba http://www.webtip.cz/art/wt_tech_php/jave_php_17.html
barrytrotter
Profil
Myslíš z adresára FTP?
Taps
Profil
rkomoras
http://php.vrana.cz/prochazeni-adresaru.php
http://tw.php.net/manual/en/function.readdir.php
srigi
Profil
http://autoindex.sourceforge.net/
rkomoras
Profil
díky ;)
quarry
Profil
Ahoj, první odkaz (webtip.cz) je super, ale nevíte někdo jak by se dalo jednotlivé soubory mazat?
Na webu mám upload souborů a výpis má sloužit pouze pro zobrazení těchto souborů, ale chtěl bych, aby šli i mazat.
Například kdyby byla u každého souboru ikonka koše a po kliku by se soubor smázl nebo zaškrtávací políčko a pak klik na tlačítko smazat. Nebo nějaká jiná metoda, jen jsem chtěl vysvětlit o co mi jde.
Nevíte někdo jak to vyřešit? Hledal jsem na netu a nic jsem nenašel.
Předem děkuji za odpověď
quarry
Profil
Nikdo neví?
SwimX
Profil
quarry
nějak takle?
<a href="?akce=smaz&amp;nazev=jmenosouboru.jpg">KOS</a>

if(isset($_GET['akce']) && $_GET['akce'] == "smaz"){
  if(isset($_GET['nazev']) && file_exist($_GET['nazev']))
    unlink($_GET['nazev']);
}
Medvídek
Profil
SwimX
Nestačilo by pouze:

<a href="?smazat=jmenosouboru.jpg">KOS</a>

  if(isset($_GET['smazat']) && file_exist($_GET['smazat'])){
    unlink($_GET['smazat']);
}

Timy
Profil
<a href="?smazat=jmenosouboru.jpg">KOS</a>
Jen takhle je to ideální na nějaké hacknutí typu <img src="?smazat=jmenosouboru.jpg">.
SwimX
Profil
Medvídek
stačilo :)
quarry
a eště se občas hodí potvrzení. Někdo rychle kliká, a pak už to nejde vzít zpět
<a href="?smazat=jmenosouboru.jpg" onclick="return confirm('Opravdu');">KOS</a>
Medvídek
Profil
Timy
Tak předpokládám, že ne každý bude mít k mazání přístup :)
Timy
Profil
Medvídek
Bezpečnost založená pouze na uzavřeném kódu není zrovna dobrá cesta…

Aha, tys to asi myslel jinak. Samozřejmě ten předchozí kód předpokládal, že ho navštíví někdo, kdo ta práva má. Můžu udělat stránku se stovkou takových obrázků, pak stačí poslat link adminovi systému, který je zrovna přihlášený, on tam nic netušíc vkročí a data se smažou. Nebo se ani nemusít štvát se stránkou plnou obrázků, stačí mu ten link na smazání poslat třeba emailem a odkaz „zamaskovat“ přes tinyurl.
SwimX
Profil
Timy
nastiň nějaké řešení. Nejsem v php natolik zběhlý, nic mě nenapadá.
Timy
Profil
SwimX
Asi nejjednodušší bude nechat to odesílat jako POST, ne jako GET. Sice se to dá zfalšovat taky, ale hůře. Bude to mít tu výhodu, že můžeš najednou označit více článků, které chceš vymazat, pomocí checkboxu. Formulář pak ještě můžeš ošetřit tak, že tam přidáš hidden input, kterému dáš náhodnou hodnotu. Tuto hodnotu pak uložíš někam do cookies/session a při odesílání kontroluješ, jestli je ta hodnota stejná. Pokud bude někdo chtít zfalšovat formulář, bude se muset trefit do té náhodné hodnoty, což není pravděpodobné.

Více v článku Co je Cross-Site Request Forgery a jak se mu bránit.

Kdybys trval na GETu, můžeš to ošetřit tak, že do odkazu na smazání přidáš nějaký token (nebo jak se tomu říká…), takže místo <a href="?smazat=jmenosouboru.jpg"> tam budeš mít <a href="?smazat=jmenosouboru.jpg&kontrola=asdasdfsdf">. Ten řetězec v proměnné kontrola si zase nějak náhodně vygeneruješ a uložíš do cookies/session a po odeslání zkontroluješ, jestli je hodnota v GET["kontrola"] stejná jako v session.
SwimX
Profil
Timy
Děkuji. Mám také fotogalerii s jakousi administrací. GETx na POSTy předělávat nebudu ale přidám ten hidden, popř token.
imploder
Profil
Timy
Jen takhle je to ideální na nějaké hacknutí typu <img src="?smazat=jmenosouboru.jpg">.
Tak samozřejmě by to mělo být navázané na sessid nějakého oprávněného uživatele. A jméno souboru se musí kontrolovat, aby neobsahovalo znaky pro přesun do jiného adresáře ("..", pokud se nesmí do podadresářů, tak "/").

Asi nejjednodušší bude nechat to odesílat jako POST, ne jako GET.
To je v podstatě irelevantní. Bezpečnost se nemá zakládat na utajeném kódu, tím spíš je hloupé ji založit na domněnce, že hacker je totální lama, co má jen řádek URL v prohlížeči a naprosto žádného, ani úplně elementárního bota (který, tak jako prohlížeč, pochopitelně POST bez problémů pošle).
Timy
Profil
imploder
Tak samozřejmě by to mělo být navázané na sessid nějakého oprávněného uživatele.
Tím myslíš co?
Timy
Profil
imploder
To je v podstatě irelevantní.
Co si přečíst nejdřív celý příspěvek, než začneš vytrhávat věty z kontextu? Například hned v další větě říkám, že POST jde zfalšovat taky.

Bezpečnost se nemá zakládat na utajeném kódu
Ano, například v této větě říkám zcela něco jiného… „Bezpečnost založená pouze na uzavřeném kódu není zrovna dobrá cesta…
imploder
Profil
Timy
imploder
„Tak samozřejmě by to mělo být navázané na sessid nějakého oprávněného uživatele.“
Tím myslíš co?
Že když se uživatel přihlásí, dostane do URL těžko uhodnutelný identifikátor, např. "sessid=nd546sjaHSAafsNEjaKYhaSHals57t". Tento identifikátor se na serveru dočasně uloží jako jeho přístupový klíč, kterým se prokážeš jako ten uživatel. Odhlášením se klíč smaže a už je bezcenný, např. pro někoho, kdo ho najde v historii prohlížeče.

Prostě normální přihlašování. Pokud skripty k provedení příslušných neveřejných operací vyžadují platný klíč, tak je nikdo zvenčí použít nemůže. Pokud však někdo na autentifikaci uživatele prostě kašle, tak se pak není čemu divit.
Timy
Profil
imploder
Že když se uživatel přihlásí, dostane do URL těžko uhodnutelný identifikátor, např. "sessid=nd546sjaHSAafsNEjaKYhaSHals57t". Tento identifikátor se na serveru dočasně uloží jako jeho přístupový klíč, kterým se prokážeš jako ten uživatel. Odhlášením se klíč smaže a už je bezcenný, např. pro někoho, kdo ho najde v historii prohlížeče.
Takže když bude admin přihlášený a já mu v emailu pošlu maskovaný (přes tinyURL) odkaz na smazání článku a on na to klikne, tak se ten článek smaže?
imploder
Profil
Timy
Však já ti nic nevyčítám. Spíš bych nerad, aby tady někdo nabyl mylného dojmu, že s POSTem nic ověřovat nemusí. Ani bych to tak nedělil - prostě obojí je bez autentifikace nezabezpečené, GET stejně jako POST.
imploder
Profil
Takže když bude admin přihlášený a já mu v emailu pošlu maskovaný (přes tinyURL) odkaz na smazání článku a on na to klikne, tak se ten článek smaže?
Ne, pokud se mu do toho odkazu od tebe jeho sessid automaticky nevloží (což by bylo úplně hloupé, klíč je soukromá věc).
Timy
Profil
imploder
Aha, ta aplikace si to bude furt tahat v URL, to už je pak taky řešení. Ale mrví to adresy :-(.
imploder
Profil
Timy
Aha, ta aplikace si to bude furt tahat v URL, to už je pak taky řešení. Ale mrví to adresy :-(.
"škaredá" adresa uvnitř administrace nevadí, do té bys stejně nikdy neměl odkazovat. Aspoň to nikdo z monitoru jen tak neokouká :). A zároveň můžeš tu adresu vzít a vložit ji do jiného okna třeba úplně jiného prohlížeče třeba i na jiném počítači a dostaneš se tím na stejné místo - do své administrace. Dá se to taky dělat přes cookies - to pak je sessid v cookies a na URL to nemá vliv. PHP má na takové věci specialitu: sessions.
Timy
Profil
imploder
Dá se to taky dělat přes cookies - to pak je sessid v cookies a na URL to nemá vliv.
No ale pak by se ten soubor vymazal — uživatel klikne na odkaz, otevře se administrace, kontrola session v cookie proběhne v pořádku a soubor se smaže. Nebo jsem něco přehlédl?
imploder
Profil
Timy
No ale pak by se ten soubor vymazal — uživatel klikne na odkaz, otevře se administrace, kontrola session v cookie proběhne v pořádku a soubor se smaže.
a) pokud je uživatel přihlášený, tak ano
b) pokud není přihlášený, tak:
1. kontrola session proběhne neúspěšně -> stránka si vyžádá jméno a heslo a zároveň si pořád pamatuje, co se má udělat
2. uživatel to vyplní, tím se přihlásí ->
2a. kontrola session proběhne úspěšně -> soubor se smaže
2b. kontrola session proběhne neúspěšně -> návtrat na bod 1
Timy
Profil
imploder
a) pokud je uživatel přihlášený, tak ano
A o to mi šlo :-). Přenášet sessid přímo v URL se mi nějak moc nelíbí, ani nevím, kdy jsem to vlastně viděl naposledy. IMHO bude lepší ten postup, který jsem nastínil v [#16].
imploder
Profil
Timy
klíč v URL funguje už roky například ve hře meliorannis.cz (napsáno v Perlu)

EDIT: Není důvod vkládat klíč do každého odkazu. Stačí ty v rámci navigace na stránkách. Následováním poslaného odkazu na cizí stránku se opouští administrace a je to tak v pořádku.
« 1 2 »

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0