Autor | Zpráva | ||
---|---|---|---|
rkomoras Profil |
#1 · Zasláno: 7. 7. 2008, 11:50:50
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 |
#2 · Zasláno: 7. 7. 2008, 12:00:37
|
||
barrytrotter Profil |
#3 · Zasláno: 7. 7. 2008, 12:00:44
Myslíš z adresára FTP?
|
||
Taps Profil |
#4 · Zasláno: 7. 7. 2008, 12:01:01
|
||
srigi Profil |
#5 · Zasláno: 7. 7. 2008, 12:03:06
|
||
rkomoras Profil |
#6 · Zasláno: 7. 7. 2008, 15:49:29
díky ;)
|
||
Časová prodleva: 6 měsíců
|
|||
quarry Profil |
#7 · Zasláno: 12. 1. 2009, 17:36:56
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ěď |
||
Časová prodleva: 5 dní
|
|||
quarry Profil |
#8 · Zasláno: 17. 1. 2009, 18:59:26
Nikdo neví?
|
||
SwimX Profil |
#9 · Zasláno: 17. 1. 2009, 20:23:03
quarry
nějak takle? <a href="?akce=smaz&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 |
#10 · Zasláno: 17. 1. 2009, 20:26:30 · Upravil/a: Medvídek
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 |
#11 · Zasláno: 17. 1. 2009, 20:29:18
„<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 |
#12 · Zasláno: 17. 1. 2009, 20:29:23
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 |
#13 · Zasláno: 17. 1. 2009, 20:36:16
Timy
Tak předpokládám, že ne každý bude mít k mazání přístup :) |
||
Timy Profil |
#14 · Zasláno: 17. 1. 2009, 20:37:40 · Upravil/a: Timy
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 |
#15 · Zasláno: 17. 1. 2009, 20:58:29
Timy
nastiň nějaké řešení. Nejsem v php natolik zběhlý, nic mě nenapadá. |
||
Timy Profil |
#16 · Zasláno: 17. 1. 2009, 21:08:37
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 |
#17 · Zasláno: 17. 1. 2009, 21:56:44
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 |
#18 · Zasláno: 17. 1. 2009, 22:36:28 · Upravil/a: imploder
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 |
#19 · Zasláno: 17. 1. 2009, 22:40:21
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 |
#20 · Zasláno: 17. 1. 2009, 22:42:16
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 |
#21 · Zasláno: 17. 1. 2009, 22:55:28
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 |
#22 · Zasláno: 17. 1. 2009, 22:57:53
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 |
#23 · Zasláno: 17. 1. 2009, 22:58:14
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 |
#24 · Zasláno: 17. 1. 2009, 23:02:44
„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 |
#25 · Zasláno: 17. 1. 2009, 23:08:25
imploder
Aha, ta aplikace si to bude furt tahat v URL, to už je pak taky řešení. Ale mrví to adresy :-(. |
||
imploder Profil |
#26 · Zasláno: 17. 1. 2009, 23:18:20
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 |
#27 · Zasláno: 17. 1. 2009, 23:26:57
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 |
#28 · Zasláno: 17. 1. 2009, 23:41:33 · Upravil/a: imploder
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 |
#29 · Zasláno: 17. 1. 2009, 23:43:41
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 |
#30 · Zasláno: 17. 1. 2009, 23:44:51 · Upravil/a: imploder
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. |
||
Téma pokračuje na další straně.
|
0