Nette 2.0.3 a token formulara

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
whitedeath
Člen | 25
+
0
-

Ahoj,

prave skusam v najnovsej stable verzii Nette ochranu formularov proti CSRF utoku pridanim

<?php
$this->addProtection();

// resp.
$this->addProtection('Token isn\'t valid', 1);
?>

a v sablone mam tri rozne formulare a v kazdom mi to vygeneruje totozny kod, co by mi az tak nevadilo, ale vadi mi to, ze po refreshi stranky, aj po vymazani cache mi to generuje stale ten isty token, dokonca aj po pouziti formulara mi to vygeneruje ten isty kod…

tak som sa s tym hral a dal som si vypisat toto

<?php
public function addProtection($message = NULL, $timeout = NULL)
{
	$session = $this->getSession()->getSection('Nette.Forms.Form/CSRF');
	$key = "key$timeout";
	if (isset($session->$key)) {
		$token = $session->$key;
	} else {
		$session->$key = $token = Nette\Utils\Strings::random();
	}
	var_dump("token:". $token);die();
	$session->setExpiration($timeout, $key);
	$this[self::PROTECTOR_ID] = new Controls\HiddenField($token);
	$this[self::PROTECTOR_ID]->addRule(self::PROTECTION, $message, $token);
}
?>

a random metodu som nahradil tymto:

<?php
$randstr = "";
for($i = 0; $i < $length; $i++)
{
	$randnum = mt_rand(0, 61);
	if($randnum < 10)
		$randstr .= chr($randnum + 48);
	else if($randnum < 36)
		$randstr .= chr($randnum + 55);
	else
		$randstr .= chr($randnum + 61);
}
return $randstr;
?>

a stale mi to vyhadzuje ten isty token…

Moze byt chyba v nejakom mojom nastaveni? Alebo nieco robim uplne zle?

Dakujem za vas cas.

Editoval whitedeath (5. 4. 2012 0:45)

David Grudl
Nette Core | 8228
+
0
-

Je to v pořádku, token se používá v rámci session stále stejný.

whitedeath
Člen | 25
+
0
-

Vdaka za odpoved,

takze mam este jednu otazku: ak to,

– ze v kazdom jednom formulari na stranke je ten isty token a to,
 – ze po kazdom pouziti formulara je tam presne ten isty token a to,
 – ze nech mam stranku otvorenu v lubovolnom pocte tabov a je tam stale presne ten isty token

je normalne chovanie a zda sa mi to odveci, to je tym, ze nechapem ako pracuju sessions? Alebo cim to je? Pretoze sa mi to potom zda uplne zbytocne. Mam si nastudovat ako pracuju sessions? Alebo co mi odporucate na dalsie studium ohladom tohto?

Dakujem.

Aurielle
Člen | 1281
+
0
-

Nastuduj si sessions.

David Grudl
Nette Core | 8228
+
0
-

Je to v pořádku proto, že jako ochrana před CSRF je to dostačující. Předpokladem je, že se žádný token neprozradí.

whitedeath
Člen | 25
+
0
-

Vdaka za odpovede, idem si to nastudovat blizsie.