PHP fóra: Builder | JakPsatWeb | Webtrh
Nejste přihlášen(a)
Mam napisany own framework, ktory mi riesi pekne URL. Typicky abstrakt je, ze URL www.example.com/logout zavola triedu LogoutController a jej metodu indexAction().
Ak do browsera zadam tuto URL adresu priamo, dojde k odhlaseniu – zniceniu session a pod. stuff. No ale problem je, ze k tomu dojde aj ked pridem na cudziu stranku, v ktorej je napr, obrazok s HTML kodom <img src=„www.example.com/logout“ />.
Slo by to nejako osetrit? (ostrovat formulare – to uz viem ako na to).
developing on Mac OS Lion, Apache 2.2.20, PHP-5.3.6 (mod_php5), Mysql 5.5.15 :: www.twitter.com/srigi
Osobně například i odhlašování řeším pomocí formuláře, takže pokud požadavek není poslán z něj, nestane se nic (nic se nevolá). Teoreticky by mohlo skýtat řešení i kontrolování refereru, tedy zda někdo zavolal http://www.example.com/logout přímo (například napsal adresu do prohlížeče a potvrdil), zavolal script ze stejného webu (tedy http://www.example.com/whatever) nebo z jiného webu (třeba na něj přišel z odkazu na jiném webu).
Prostě kontrolovat odkud přišel požadavek.
Saying that Java is nice because it works on all OS's is like saying that anal sex is nice because it works on all genders.
Prijde mi trochu divne, ze by cizi stranka sahala na neco do tve administrace co by te odhlasaovalo. Predpokladam, ze to odhlasi jen tebe a jen pokud jsi prihlasen.
Dalsi moznost by byla nejaky unikatni token
(www.example.com/logout?token=neco) vygenerovany pri prihlaseni,
ale tim ztratis pekneURL. Nebo do URL zapasaovat nick uzivatele. Tim by se
pravdepodobnost uhodnti adresy kapku snizila.
(www.example.com/phx/logout)
danaketh napsal(a):
Osobně například i odhlašování řeším pomocí formuláře, takže pokud požadavek není poslán z něj, nestane se nic (nic se nevolá). Teoreticky by mohlo skýtat řešení i kontrolování refereru, tedy zda někdo zavolal http://www.example.com/logout přímo (například napsal adresu do prohlížeče a potvrdil), zavolal script ze stejného webu (tedy http://www.example.com/whatever) nebo z jiného webu (třeba na něj přišel z odkazu na jiném webu).
Prostě kontrolovat odkud přišel požadavek.
Tímhle se vůbec nic nevyřeší, naopak to může tak akorát způsobit problémy. Funkční řešení je odhlášení přes formulář a jako hidden input onen token a řekl bych, že jediné správné.
presne jak pise Kevujin – melo by to byt pres formular s tokenem. Tohle je obecne velky problem a bohuzel rozumne reseni, alespon co vim, neexistuje.
Tedy jde jeste o blby logout, ale v typickem backendu funguji odkazy typu „/admin/delete_record.php?id=xxx“, pricemz k smazani cele tabulky pomoci CSRF pak staci vygenerovat na strance treba 1000 obrazku. Pokud tam nemuze byt formular, mel by byt token urcite soucasti kazdeho takoveho odkazu.
hledáme zkušené programátory v PHP / Nette: http://www.twobits.cz/volna-mista/
Jak už tu bylo napsáno url slouží k prezentaci a ke změně stavu slouží formuláře. Jinak pokud by se ti to nechtělo moc předělávat, tak můžeš jako odpověď na takové URL zobrazit otázku Opravdu si přejete …
Myslím že problém je v samotné otázce Ako chranit pred CSRF pri coolURI. Způsob ochrany před CSRF je popsán třeba u Jakuba, včetně použítí autorizačního parametru v URL. CoolURI jsou jen kosmetickou záležitostí, jak URL vypadá, ale s principem ochrany a provedením to nemá co dočinění. Tudíž: chránit stejně jako bez coolURI.
Snad ještě jedna poznámka ke coolUri: jak správně zmínil Google v jednom ne moc štastném doporučení, autorizační token rozhodně nemá být součástí cesty, ale má se přenášet v parametru query.
jelikož po každé úpravě nebo odhlášení by mělo následovat přesměrování (po odhlášení do veřejné sekce, po smazání záznamu třeba na přehled všech položek..), tak nevím jaký má smysl v takových případech dělat hezké uri
pokud nelze použít chráněný formulář, tak je nutné použít token v adrese nebo potvrzovací dotaz. ovšem tento dotaz musí být chráněn tokenem!
pokud již platnost tokenu vypršela, tak by bylo dobré se uživatele zeptat zda chce akci skutečně provést (a ne ho jen zdvořile poslat k šípku)