#1 před 3 lety

srigi
Člen
Registrovaný: 6. 1. 2009
Příspěvky: 466

Ako chranit pred CSRF pri coolURI

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

 

#2 před 3 lety

danaketh
Člen
Registrovaný: 27. 12. 2008
Příspěvky: 23

Re: Ako chranit pred CSRF pri coolURI

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.

 

#3 před 3 lety

phx
Moderator
Registrovaný: 17. 4. 2008
Příspěvky: 878

Re: Ako chranit pred CSRF pri coolURI

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)

 

#4 před 3 lety

Kevujin
Člen
Registrovaný: 6. 1. 2009
Příspěvky: 11

Re: Ako chranit pred CSRF pri coolURI

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é.

 

#5 před 3 lety

Wosonj
Člen
Registrovaný: 22. 12. 2008
Příspěvky: 65

Re: Ako chranit pred CSRF pri coolURI

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/

 

#6 před 3 lety

Villem
Člen
Registrovaný: 6. 1. 2009
Příspěvky: 24

Re: Ako chranit pred CSRF pri coolURI

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 …

 

#7 před 3 lety

David Grudl
Administrator
Registrovaný: 8. 2. 2005
Příspěvky: 5548

Re: Ako chranit pred CSRF pri coolURI

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.

 

#8 před 3 lety

paranoiq
Člen
Registrovaný: 14. 11. 2006
Příspěvky: 350

Re: Ako chranit pred CSRF pri coolURI

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)

 

Zápatí