Autor | Zpráva | ||
---|---|---|---|
Magnus123 Profil |
#1 · Zasláno: 6. 7. 2012, 16:13:27
Ahoj.
Někde jsem četl, že proti CSRF stačí mít u každého uživatele uložený (v DB) trvalý token a ten používat. Je to dostačující způsob, nebo je lepší po každé akci generovat nový? |
||
ShiraNai7 Profil |
#2 · Zasláno: 6. 7. 2012, 17:17:05
No mělo by to stačit ve většině případů, ale nejefektivnější je ho pokaždé vygenerovat.
|
||
Magnus123 Profil |
#3 · Zasláno: 6. 7. 2012, 17:41:07
Mohl/a bys mi, prosím, vysvětlit, ve kterém případě to fungovat nebude?
|
||
joe Profil |
#4 · Zasláno: 6. 7. 2012, 23:38:02
Dobré je token po každé akci změnit, protože pokud budeš používat pořád ten samý (každý uživatel, jiný token) a útočníkovi se ho pokusí zjistit, dá se toho zneužít.
|
||
Jan Tvrdík Profil |
#5 · Zasláno: 7. 7. 2012, 00:32:21
joe:
„Dobré je token po každé akci změnit“ To je velmi špatné řešení a uživatelé tě za ně budou nenávidět, protože jim vezmeš možnost pracovat s aplikací ve více oknech. Magnus123: Trvalý token v DB mít můžeš, ale nikdy nesmí opustit server. Skutečný token (řetězec vkládaný do skrytého pole formuláře nebo do URL) by měl být vázaný na session id uživatele, takže ho můžeš spočítat třeba jako sha1($dbToken . $sessionId) . Ještě lepší je mít jiný token pro každou akci (třeba sha1($dbToken . $sessionId . 'clanek/smazat/#27') ).
|
||
ShiraNai7 Profil |
#6 · Zasláno: 7. 7. 2012, 14:30:55
Jan Tvrdík, Magnus123:
„To je velmi špatné řešení a uživatelé tě za ně budou nenávidět, protože jim vezmeš možnost pracovat s aplikací ve více oknech.“ Já to jednou vyřešil tak, že ukládám (do session) až 30 posledních vygenerovaných tokenů (není to nijak datově náročné, jsou to obyčejné hashe). Jakmile je některý token použit, je odstraněn. Problém by nastal až při obrovském množství oken a i poté je možné (přes upozornění) odeslat formulář znovu bez ztráty dat. |
||
joe Profil |
#7 · Zasláno: 7. 7. 2012, 15:12:32
Jan Tvrdík:
„To je velmi špatné řešení“ Řešením jak to "obejít" pro více oken napsal už ShiraNai7, rozhodně se mi ale generování nového tokenu po každé akci zdá daleko víc bezpečnější, než používat ten samý, i když pro každého uživatele jiný, pro jednu stejnou akci. Útočníkovi pak stačí zjistit daný token a může být problém. |
||
Jan Tvrdík Profil |
#8 · Zasláno: 7. 7. 2012, 15:44:00
joe, ShiraNai7:
Pokud po vygenerování nového tokenu zůstává původní token stále platný, tak naopak bezpečnost ještě snižujete. „Útočníkovi pak stačí zjistit daný token a může být problém.“ Jak jsem již psal, tak „skutečný token“ by měl být správně pro každou akci a zdroj jiný. |
||
ShiraNai7 Profil |
#9 · Zasláno: 7. 7. 2012, 18:38:26
Jan Tvrdík:
„Pokud po vygenerování nového tokenu zůstává původní token stále platný, tak naopak bezpečnost ještě snižujete.“ psal jsem: „Jakmile je některý token použit, je odstraněn.“ |
||
Časová prodleva: 12 let
|
0