In yii2 erhalten Sie immer den Fehler „http400: Bad Request“, unabhängig davon, ob Sie das Testtool POSTMAN, die Befehlszeilen-CURL-Anfrage oder die Ajax-Anfrage verwenden Einschränkung von verbFilter), das ist normal.
Nachdem ich die Informationen konsultiert habe, habe ich herausgefunden, dass dies der Grund für die CRSF-Überprüfung ist.
Prinzip:
Cookie-Hashing, das den Server zulässt um einen zufälligen Wert_csrf in allen an den Client gesendeten Formularen zu markieren und gleichzeitig ein zugehöriges Token im COOKIE des Clients zu speichern;
Während der Überprüfung _POST() gibt der Server bei jedem Empfang eine versteckte Eingabe _csrf aus Eine Anfrage und das COOKIE des Clients werden verglichen und überprüft
Das Prinzip des Angriffs des Angreifers besteht darin, das COOKIE des Clients zu verwenden, aber der Angreifer kann nicht an den spezifischen Inhalt des COOKIE gelangen, das er einfach verwendet (abgesehen davon). Hier besteht die Möglichkeit von XSS-Angriffen, da Benutzer-Cookies aufgrund von XSS-Schwachstellen in der Website leicht gestohlen werden können. Im Allgemeinen geben Angreifer grundsätzlich auf, wenn sie die Notwendigkeit erkennen, Hash-Werte zu berechnen Fügen Sie der Angriffs-URL Token hinzu, sodass die Überprüfung fehlschlägt.
Dies ist möglicherweise die einfachste Lösung, da der Angreifer (theoretisch) keine Cookies von Drittanbietern erhalten kann und daher die Daten im Formular nicht erstellt werden können
Lösung:
1.禁用CRSF验证(不推荐):'enableCsrfValidation' => false, 'components' => [ 'request' => [ 'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4', 'enableCookieValidation' => false, 'enableCsrfValidation' => false, ]
2. Tragen Sie beim Senden von Daten CSRF-Informationen bei den Header (wie unten gezeigt) und senden Sie ihn zusammen mit den einzureichenden Daten
Das Obige ist der Inhalt der Yii2.0-Abwehr gegen CSRF-Angriffe. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!
Yii::$app->request->csrfParam;(获取csrf-param) Yii::$app->request->csrfToken;(获取csrf-token)