it-swarm.com.de

Tokenüberprüfung funktioniert nicht in der benutzerdefinierten Komponente admin

Ich habe eine benutzerdefinierte Komponente erstellt und drei Formulare, die in der default.php-Ansicht auf Subcontrollern innerhalb des Administrators unterschiedliche Aufgaben ausführen. In meiner tmpl-Ansicht default.php Hat jedes Formular eine <?php echo JHtml::_('form.token'); ?>, die ein verstecktes Feld mit einem Token als Namen mit dem Wert 1 darstellt. Ich habe eine Überprüfung in meinem Subcontroller, JSession::checkToken() or die, um festzustellen, ob das Token gültig ist.

Das Problem ist, dass beim Senden eines Formulars über POST die Daten POST= mit dem Token und der Funktion JSession::checkToken(), die das Token überprüfen, nicht übereinstimmen, also FALSE. Nach dem Debuggen der JSession-Klasse stellte ich fest, dass ein Token, das abgerufen wird, NICHT mit dem bereitgestellten Token identisch ist. Ich habe Google durchsucht, konnte jedoch eine funktionierende Lösung finden.

Gemäß Joomlas Dokumentation zu CSRF sollte es so einfach sein, <?php echo JHtml::_('form.token'); ?> und das Häkchen in der Steuerung JSession::checkToken() or die hinzuzufügen.

Wie können sich die beiden Token von der Form unterscheiden POST und der JSession-Klasse? Gibt es noch etwas, das ich möglicherweise vermisse oder nicht hinzugefügt habe und das nicht in der Joomla-Dokumentation enthalten ist?

2
RNickMcCandless

Ein paar Dinge fallen mir ein:

Sind Sie sicher, dass Sie an einen "Site" -Controller und nicht an einen "Admin" -Controller senden? Das Token für ein Site- oder Admin-Formular ist unterschiedlich, da die Sitzung unterschiedlich ist.

Sind Sie sicher, dass Sie über POST einreichen? Wenn Sie über GET einreichen, müssen Sie das Token mit JSession::checkToken('get') überprüfen.

Sind Sie sicher, dass Sie das Token-Feld in die Formular-Tags eingefügt haben? Sie können die Quelle anzeigen, um zu bestätigen, dass dies alles korrekt aussieht.

3
user101289