Analyse von Form-Token-Fehlern und Lösungen unter ThinkPHP
In diesem Artikel werden hauptsächlich Formular-Token-Fehler und -Lösungen unter ThinkPHP vorgestellt. Er analysiert die Prinzipien, Konfigurationen, Fehlerursachen und entsprechenden Lösungen von thinkPHP-Formular-Tokens im Detail.
Das Beispiel In diesem Artikel werden die Formular-Token-Fehler und Lösungen unter ThinkPHP beschrieben. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:
Während des Entwicklungsprozesses des Projekts ist mir beim Hinzufügen und Bearbeiten von Daten gelegentlich der vom System angezeigte „Form-Token-Fehler“ aufgefallen. Ich habe dem Problem zunächst nicht viel Aufmerksamkeit geschenkt, bis ich heute Nachmittag etwas Freizeit hatte, also folgte ich dem Quellcode von TP3.13 und las ihn Minuten, ich kannte die ganze Geschichte.
Um Formular-Tokens im Projekt zu aktivieren, müssen Sie normalerweise die folgende Konfiguration in der Konfigurationsdatei vornehmen
// 是否开启令牌验证 'TOKEN_ON' => true, // 令牌验证的表单隐藏字段名称 'TOKEN_NAME' => '__hash__', //令牌哈希验证规则 默认为MD5 'TOKEN_TYPE' => 'md5', //令牌验证出错后是否重置令牌 默认为true 'TOKEN_RESET' => true
Bearbeiten Sie die Daten als Beispiel: Normalerweise gibt es auf dem Server ein Modell mit Feldfilterregeln und eine Aktion mit Datenerkennungscode, z. B.
$table = D('table'); if(!$table->create()){ exit($this->error($table->getError())); }
Zu diesem Zeitpunkt ist doppelt Klicken Sie in der IDE auf create(), um die Methode create in Model.class.php im TP-Framework zu finden.
/** * 创建数据对象 但不保存到数据库 * @access public * @param mixed $data 创建数据 * @param string $type 状态 * @return mixed */ public function create($data='',$type='') { ……省略…… // 表单令牌验证 if(!$this->autoCheckToken($data)) { $this->error = L('_TOKEN_ERROR_'); return false; } ……省略…… }
Wenn Sie den Code sehen, werden Sie es verstehen dass ein Fehler gemeldet wird, wenn die autoCheckToken-Methode nicht erkannt wird, also verfolgen Sie diese Methode weiter
// 自动表单令牌验证 // TODO ajax无刷新多次提交暂不能满足 public function autoCheckToken($data) { // 支持使用token(false) 关闭令牌验证 // 如果在Action写了D方法,但没有对应的Model文件,那么$this->options为空 if(isset($this->options['token']) && !$this->options['token']) return true; if(C('TOKEN_ON')){ $name = C('TOKEN_NAME'); if(!isset($data[$name]) || !isset($_SESSION[$name])) { // 令牌数据无效 return false; } // 令牌验证 list($key,$value) = explode('_',$data[$name]); if($value && $_SESSION[$name][$key] === $value) { // 防止重复提交 unset($_SESSION[$name][$key]); // 验证完成销毁session return true; } // 开启TOKEN重置 if(C('TOKEN_RESET')) unset($_SESSION[$name][$key]); return false; } return true; }
Nachdem Sie diesen Code gelesen haben, werden Sie feststellen, dass dies der Fall ist $_SESSION[$name] im ersten Urteil, woher kommt also diese Seesionsvariable? Nun, dies muss beim Generieren des Tokens beginnen. Suchen Sie die Datei TokenBuildBehavior.class.php
// 创建表单令牌 private function buildToken() { $tokenName = C('TOKEN_NAME'); $tokenType = C('TOKEN_TYPE'); if(!isset($_SESSION[$tokenName])) { $_SESSION[$tokenName] = array(); } // 标识当前页面唯一性 $tokenKey = md5($_SERVER['REQUEST_URI']); if(isset($_SESSION[$tokenName][$tokenKey])) {// 相同页面不重复生成session $tokenValue = $_SESSION[$tokenName][$tokenKey]; }else{ $tokenValue = $tokenType(microtime(TRUE)); $_SESSION[$tokenName][$tokenKey] = $tokenValue; } $token = '<input type="hidden" name="'.$tokenName.'" value="'.$tokenKey.'_'.$tokenValue.'" />'; return $token; }
Dieser Code wird hauptsächlich verwendet, um die Formularüberprüfung in TP zu ermöglichen. In diesem Fall wird der Tokenwert basierend auf TOKEN_NAME und dem MD5 des aktuellen URI generiert Wenn nicht, geben Sie „false“ zurück. Wenn dies der Fall ist, geben Sie „true“ zurück. Wenn es konsistent ist, geben Sie „true“ zurück .
ok, zurück zum Thema, es gibt nur zwei Möglichkeiten für Token-Fehler beim Senden von Formularen unter TP
1 Wenn das Token aktiviert ist, gibt es im übermittelten Formular keinen TOKEN_NAME Feld oder keine entsprechende Sitzung (in der aktuellen Übermittlungsformularumgebung wird keine entsprechende Sitzung generiert. Dies liegt hauptsächlich daran, dass nach dem Absenden durch den Benutzer ein Fehler gemeldet wird und der Benutzer dann die aktuelle Seite aktualisiert. Gleichzeitig werden die Bearbeitungsseite und die Anzeigeseite sind in der gleichen Methode)
2. Es gibt eine Sitzungsvariable, aber die Vorher- und Nachherwerte sind unterschiedlich
Der Grund, warum dieser Fehler in unserem Projekt auftritt, ist ersichtlich in der folgenden Konfiguration
return array ( 'TOKEN_ON' => 'false', 'TOKEN_NAME' => '__hash__', 'TOKEN_TYPE' => 'md5', 'TOKEN_RESET' => 'true', 'DB_FIELDTYPE_CHECK' => 'true' );
Ursprünglich sollte es als boolescher Wert als falsch geschrieben werden, aber ich weiß nicht, welcher Held es als Zeichenfolge als falsch geschrieben hat. Dann basiert die Beurteilung natürlich auf der Logik des Öffnens des Formular-Tokens, und im Projekt sind die Methoden zum Hinzufügen, Bearbeiten und Anzeigen dieselben. Sobald ein Überprüfungsfehler auftritt, kehrt die allgemeine Programmverarbeitungslogik zur ursprünglichen Schnittstelle zurück , dann ist es das gleiche Formular wie beim letzten Mal. Die kontinuierliche Übermittlung desselben Formulars entspricht einer wiederholten Übermittlung, dann „Formular-Token-Fehler“.
Verwandte Empfehlungen:
Wie thinkPHP die Check-in-Funktion implementiert
ThinkPHP implementiert Excel Datenimport und -export (mit komplettem Fall)
Das obige ist der detaillierte Inhalt vonAnalyse von Form-Token-Fehlern und Lösungen unter ThinkPHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

PHP ist hauptsächlich prozedurale Programmierung, unterstützt aber auch die objektorientierte Programmierung (OOP). Python unterstützt eine Vielzahl von Paradigmen, einschließlich OOP, funktionaler und prozeduraler Programmierung. PHP ist für die Webentwicklung geeignet, und Python eignet sich für eine Vielzahl von Anwendungen wie Datenanalyse und maschinelles Lernen.

PHP entstand 1994 und wurde von Rasmuslerdorf entwickelt. Es wurde ursprünglich verwendet, um Website-Besucher zu verfolgen und sich nach und nach zu einer serverseitigen Skriptsprache entwickelt und in der Webentwicklung häufig verwendet. Python wurde Ende der 1980er Jahre von Guidovan Rossum entwickelt und erstmals 1991 veröffentlicht. Es betont die Lesbarkeit und Einfachheit der Code und ist für wissenschaftliche Computer, Datenanalysen und andere Bereiche geeignet.

PHP eignet sich für Webentwicklung und schnelles Prototyping, und Python eignet sich für Datenwissenschaft und maschinelles Lernen. 1.PHP wird für die dynamische Webentwicklung verwendet, mit einfacher Syntax und für schnelle Entwicklung geeignet. 2. Python hat eine kurze Syntax, ist für mehrere Felder geeignet und ein starkes Bibliotheksökosystem.

PHP bleibt im Modernisierungsprozess wichtig, da es eine große Anzahl von Websites und Anwendungen unterstützt und sich den Entwicklungsbedürfnissen durch Frameworks anpasst. 1.PHP7 verbessert die Leistung und führt neue Funktionen ein. 2. Moderne Frameworks wie Laravel, Symfony und Codesigniter vereinfachen die Entwicklung und verbessern die Codequalität. 3.. Leistungsoptimierung und Best Practices verbessern die Anwendungseffizienz weiter.

PhPhas significantantyPactedWebDevelopmentAndendendsbeyondit.1) iTpowersMAjorPlatforms-LikewordpressandExcelsInDatabaseInteractions.2) php'SadaptabilityAllowStoscaleForLargeApplicationsfraMe-Linien-Linien-Linien-Linienkripte

PHP -Typ -Eingabeaufforderungen zur Verbesserung der Codequalität und der Lesbarkeit. 1) Tipps zum Skalartyp: Da Php7.0 in den Funktionsparametern wie int, float usw. angegeben werden dürfen. 3) Eingabeaufforderung für Gewerkschaftstyp: Da Php8.0 in Funktionsparametern oder Rückgabetypen angegeben werden dürfen. 4) Nullierstyp Eingabeaufforderung: Ermöglicht die Einbeziehung von Nullwerten und Handlungsfunktionen, die Nullwerte zurückgeben können.

Verwenden Sie in PHP das Klonschlüsselwort, um eine Kopie des Objekts zu erstellen und das Klonierungsverhalten über die \ _ \ _ Clone Magic -Methode anzupassen. 1. Verwenden Sie das Klonschlüsselwort, um eine flache Kopie zu erstellen und die Eigenschaften des Objekts, nicht die Eigenschaften des Objekts zu klonen. 2. Die \ _ \ _ Klonmethode kann verschachtelte Objekte tief kopieren, um flache Kopierprobleme zu vermeiden. 3. achten Sie darauf, dass kreisförmige Referenzen und Leistungsprobleme beim Klonen vermieden werden, und optimieren Sie die Klonierungsvorgänge, um die Effizienz zu verbessern.

PHP eignet sich für Webentwicklungs- und Content -Management -Systeme, und Python eignet sich für Datenwissenschafts-, maschinelles Lernen- und Automatisierungsskripte. 1.PHP hat eine gute Leistung beim Erstellen von schnellen und skalierbaren Websites und Anwendungen und wird üblicherweise in CMS wie WordPress verwendet. 2. Python hat sich in den Bereichen Datenwissenschaft und maschinelles Lernen mit reichen Bibliotheken wie Numpy und TensorFlow übertrifft.


Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

MinGW – Minimalistisches GNU für Windows
Dieses Projekt wird derzeit auf osdn.net/projects/mingw migriert. Sie können uns dort weiterhin folgen. MinGW: Eine native Windows-Portierung der GNU Compiler Collection (GCC), frei verteilbare Importbibliotheken und Header-Dateien zum Erstellen nativer Windows-Anwendungen, einschließlich Erweiterungen der MSVC-Laufzeit zur Unterstützung der C99-Funktionalität. Die gesamte MinGW-Software kann auf 64-Bit-Windows-Plattformen ausgeführt werden.

DVWA
Damn Vulnerable Web App (DVWA) ist eine PHP/MySQL-Webanwendung, die sehr anfällig ist. Seine Hauptziele bestehen darin, Sicherheitsexperten dabei zu helfen, ihre Fähigkeiten und Tools in einem rechtlichen Umfeld zu testen, Webentwicklern dabei zu helfen, den Prozess der Sicherung von Webanwendungen besser zu verstehen, und Lehrern/Schülern dabei zu helfen, in einer Unterrichtsumgebung Webanwendungen zu lehren/lernen Sicherheit. Das Ziel von DVWA besteht darin, einige der häufigsten Web-Schwachstellen über eine einfache und unkomplizierte Benutzeroberfläche mit unterschiedlichen Schwierigkeitsgraden zu üben. Bitte beachten Sie, dass diese Software

SecLists
SecLists ist der ultimative Begleiter für Sicherheitstester. Dabei handelt es sich um eine Sammlung verschiedener Arten von Listen, die häufig bei Sicherheitsbewertungen verwendet werden, an einem Ort. SecLists trägt dazu bei, Sicherheitstests effizienter und produktiver zu gestalten, indem es bequem alle Listen bereitstellt, die ein Sicherheitstester benötigen könnte. Zu den Listentypen gehören Benutzernamen, Passwörter, URLs, Fuzzing-Payloads, Muster für vertrauliche Daten, Web-Shells und mehr. Der Tester kann dieses Repository einfach auf einen neuen Testcomputer übertragen und hat dann Zugriff auf alle Arten von Listen, die er benötigt.

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor