Autor Zpráva
nload
Profil *
Chtěl bych si implementovat nějakou ochranu proti CSFR útoku. Napadlo mě udělat to tak, že se pro každé načtení stránky bude generovat globální token, který se uloží do session a zároveň přidá do všech formulářů na stránce do "action" kus kódu "&__token=nahodnysledznaku". Je i tohle dost bezpečný? Často vidím, že se to řeší přímo u jednotlivých formulářů přidáním hidden inputu, moje řešení by bylo pro celou stránku.
Alphard
Profil
Jestli to dobře chápu, vaše řešení nepočítá s prací ve více oknech.
V jednom začnu něco dělak, pak si otevřu nějaký odkaz do jiného panelu (vygeneruje se nový token do session), vrátím se do původního, dám odeslat a jestli tam není nějaký záchranný mechanismus, data v háji.
FEIL
Profil
Je také pravidlo, týkajúce sa formulárov na webe - ak nejaká akcia mení stav databázy (pridáva / upravuje / vymazáva položky), treba použiť metódu POST (odkazy používajú metódu GET. Možno to znie odveci ale je to k danej téme.
FEIL
Profil
Alebo nejak takto?
<form method="post" action="vymaz.php"> 
<input name="id" value="<?php echo $id; ?>" type="hidden"> 
<input name="token" value="<?php generate_token(); ?>" type="hidden"> 
<input type="submit" value="Vymazať"> 
</form> 
 

Kód pre vymaz.php: 
kód: 
<?php 
if (validate_token($_POST['token']) && validate_id($_POST['id'])) { 
    mysql_query("DELETE FROM inzeraty WHERE id = '".$_POST['id']."'"); 
    echo "Vymazané!"; 
} else { 
    echo "Chyba, odošlite formulár ešte raz."; 
} 
?> 
 

Joker
Profil
Alphard:
Jestli to dobře chápu, vaše řešení nepočítá s prací ve více oknech.
Ale neměl by být velký problém to rozšířit na více tokenů, tj. místo tokenu mít v session pole aktivních tokenů. Nová stránka by dostala svůj a starý token by zůstal aktivní. Jen by nebylo od věci nějaké rozumné maximální množství tokenů, aby nevznikla situace, že by nějaký útočník mohl nagenerovat milióny tokenů. Případně možná k tokenu ještě přidat informaci, pro jaký požadavek byl vygenerován.

Jednodušší možnost by byla generovat autorizační token při přihlášení a potom používat ten samý po celou dobu existence relace. To je sice méně bezpečné než jednorázové tokeny, ale pořád mi to připadá jako slušná úroveň zabezpečení.
nload
Profil *
Nejlogičtější mi připadá toto: Předpokládám nějaký timeout dejme tomu 20 minut, po kterém dojde k automatickému odhlášení uživatele. Dále mám pro každou stránku zvlášť generované unikátní __token_id a __token, pokud se daná stránka odešle a dojde k úspěšnému ověření, vymaže se daný token ze session, pokud ne, tak se automaticky (po načtení nějaké stránky) vymaže po 20 minutách a nebo pokud bude těch tokenů už moc, tak se vymaže ten nejstarší. Tohle by bylo dost bezpečné, i kdybych ty tokeny připojoval k datům odesílaných metodou get např. "<form method=post action=./stranka.php?__token_id=daf84a9s84f9s&amp;token=f49af4s94afasdf49s>" že?

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