Nextras secured links – k čemu parametry?

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

Zdravím,

proč se vytváří jiný CSRF token, když se změní hodnota nějakého parametru?
Když budu například chtít udělat dva odkazy, kdy každý bude mít jinou hodnotu parametru, k čemu bude, že se pro každý vygeneruje token nový?

Casper
Člen | 253
+
+1
-

Mrkni na Bezpečnost & Nette v tomto videu (CSRF začíná od 20:20). Vysvětlení tvého dotazu je cca od 32:30.

Magnus
Člen | 65
+
0
-

Děkuji za odpověď a video. :-)

Magnus
Člen | 65
+
0
-

Narazil jsem teď na menší problém, který se týká hodnoty parametru _seq.
Potřebuji pomocí signálu upravit hodnotu v databázi, požadavek posílám AJAXem. Problém je, že ID dostanu pomocí JS po kliknutí na určitý element (není to formulář, ale pouze div).
Přesněji má uživatel seznam příchozích zpráv, z nichž se nepřečtené zobrazují jinou barvou. Když uživatel klikne na box (vykreslený divem), tak se pošle AJAXový požadavek, aby se zpráva označila jako přečtená.

Zjednodušeně to vypadá nějak takto:

<div class="messageBox" onclick="markMessageAsRead({$messageId})">
   ... obsah první zprávy
</div>
<div class="messageBox" onclick="markMessageAsRead({$messageId})">
   ... obsah druhé zprávy atp.
</div>

<script>

function markMessageAsRead(id)
{
	var data = {"messageId": id}
	$.get({link handleMarkMessageAsRead!}, data);
}

</script>

Makro mi samozřejmě vytvoří odkaz s určitou hodnotou v parametru _seq, ale jelikož se pro každý jiný parametr (v tomto případě ID zprávy) vytváří jiná hodnota, server pak hází Internal error, protože kontrola těch hodnot nesedí.

Jak byste to řešili?

Jan Tvrdík
Nette guru | 2595
+
0
-

Tohle by mělo snad fungovat:

public function handleMarkMessageAsRead($messageId = NULL)
{
	// ...
}

(Volitelné parametry to nebere při výpočtu kontrolního hashe v potaz.)

David Matějka
Moderator | 6445
+
0
-

Koukam, ze to ignoruje optional parameters. Takze mu dej v handle metode defaultni hodnotu (treba NULL) a melo by to jet.

Nebo vygenerovat cely odkaz do html (treba do data atributu)

<div class="messageBox" onclick="markMessageAsRead({$messageId})" data-mark-as-read-url={link handleMarkMessageAsRead! $messageId}>

pozde :(

Editoval matej21 (10. 1. 2015 20:45)

Magnus
Člen | 65
+
0
-

Moc díky oběma za odpověď, řešení funguje. :)