it-swarm.com.de

So generieren Sie einen pseudozufälligen Einmal-Code für das Anforderungstoken

Um CSRF-Angriffe zu vermeiden, verwenden wir ein Sicherheitstoken und validieren die Anforderung anhand des Tokens. Dies könnte durch den folgenden Code erreicht werden, um ein Token zu generieren

$link = JRoute::_('index.php?option=com_comp&view=comview&task=action'&'.JSession::getFormToken().'=1');

um das Token zu validieren

JSession::checkToken('get') or die( 'Invalid Token' );

und der Link erzeugt wie ... http: //localhost/index.php? option = com_comp & view = comview & task = action & 231a817c6f53a732b6d70f3e2c3c5fcd = 1

Nun ist meine Frage: Dieser Token-Code ist kein Einmalcode, es können viele Anfragen auf den gleichen Token gestellt werden.

Dies erfüllt also nicht den eigentlichen Zweck.

Ich denke, das Token generieren und das Token prüfen müssen in Beziehung stehen, und sobald es überprüft wird, sollte sich der Wert ändern, wenn wir das nächste Mal ein Token erhalten.

Gibt es einen Code oder eine Funktion in Joomla, die das kann?

6

Manchmal muss ich auch das Sitzungstoken aktualisieren, um zu verhindern, dass der Benutzer die Schaltfläche "Zurück" verwendet oder die Seite erneut sendet. Ich mache es in meinem Controller mit der folgenden Methode

/**
 * Convenience method to refresh the session token to prevent the back button
 *
 * @return void
 * @since 0.0.2
 */
protected function refreshToken()
{
    $session = JFactory::getSession();
    $session->getToken(true);
}

Dadurch wird das ursprüngliche Token ungültig, sodass Formulare, die mit dem alten Token gesendet wurden, nicht erneut gesendet werden können.

Eine andere Option, die ich für Token verwende, die nicht mit Sicherheit zusammenhängen, ist unten

protected function getHash($object)
{
    return urlencode(md5(json_encode($object)));
}

Ich verwende dies normalerweise, wenn ich ein Objekt zur einmaligen Verwendung in der Benutzersitzung speichere. Anschließend übergebe ich den Hash in der Umleitung und deaktiviere die Sitzungsvariable, wenn sie dort ankommt, wo sie verwendet werden muss.

Hoffe das hilft = ^ D Happy Joomla! Ng

4
Mathew Lenning

Das Token ist an die Sitzung des aktuellen Benutzers gebunden und für diese Sitzung eindeutig. Sobald sich dieser Benutzer abgemeldet hat, kann der Token nicht mehr verwendet werden. Ich habe noch nie ein Problem mit diesem Setup zur Vermeidung von Spoof-Angriffen auf Formulare gesehen. Ich bin mir also nicht sicher, ob Sie wirklich ein Problem haben, das hier behoben werden muss.

Um Ihre Frage zu beantworten, können Sie jedoch Folgendes tun, um ein neues Token zu erstellen:

JSession::getFormToken(true)
3
Rob Clayburn