In diesem Artikel wird hauptsächlich der Beispielcode zum teilweisen Schließen (Öffnen) der CSRF-Überprüfung in yii2 vorgestellt. Der Herausgeber findet es ziemlich gut, daher möchte ich es jetzt mit Ihnen teilen und als Referenz dienen. Ich hoffe, es hilft allen.
(1) Für die globale Verwendung setzen wir „enableCookieValidation“ direkt in der Konfigurationsdatei auf „true“
request => [ 'enableCookieValidation' => true, ]
Wenn Sie csrf nicht verwenden müssen, legen Sie „enableCookieValidation“ fest ' => ; false, aber das ist unsicher, daher ist enableCookieValidation in yiiwebrequest standardmäßig auf true gesetzt, was bedeutet, dass csrf standardmäßig aktiviert ist, sodass wir diesen Wert auch nicht konfigurieren und standardmäßig aktivieren können.
Wenn Sie CSRF aktivieren, ist für jede Post-Anfrage eine Authentifizierung erforderlich, da es global ist. Wenn wir also Daten veröffentlichen, müssen wir die CSRF-Daten so einstellen, dass sie im Formular ausgeblendet werden.
<input type="hidden" name="_csrf" id='csrf' value="<?= Yii::$app->request->csrfToken ?>">
Beim Posten von Daten müssen Sie diesen Wert posten. Die Generierung dieses Werts ist = Yii::$app->request->csrfToken ?>, der einen verschlüsselten Wert zurückgibt csrfToken.
Ob es sich also um ein Post-Formular oder einen Ajax-Post handelt, muss der Wert von csrfToken festgelegt und beim Absenden gepostet werden. Andernfalls tritt ein Fehler auf und die Authentifizierung wird nicht bestanden.
(2) Was soll ich tun, wenn ich in einigen Controllern keine CSRF-Verifizierung verwenden möchte? Die
-Methode ist sehr einfach. Legen Sie einfach
public $enableCsrfValidation = false ,
direkt fest, da dieser Controller von yiiwebController erbt und dem Erben vom Attribut „enableCsrfValidation“ beim Erstellen entspricht Eine Controller-Instanz: Wenn dieser Controller die CSRF-Funktion deaktiviert und auf den Beitrag dieses Controllers zugreift, wird keine Überprüfung durchgeführt.
Zum Beispiel, wenn wir die API entwickeln, wenn die WeChat-Schnittstelle Daten auf unserer Schnittstelle posten muss, da die WeChat-Seite das csrfToken nicht kennt, wenn auf die Post-Daten zugegriffen wird, wenn diese aktiviert sind on Wenn es sich um ein globales CSRF handelt, ist der Zugriff definitiv nicht erfolgreich. Daher müssen Sie die CSRF dieser API deaktivieren.
3) Was ist, wenn Sie eine bestimmte Aktion gezielt schließen möchten?
Manchmal müssen wir in einigen Funktionen die CSRF-Überprüfung in einer bestimmten Aktion deaktivieren. Wir wissen, dass die Überprüfung von csrf in beforeAction($Action) implementiert ist. Als nächstes können wir die Methode beforeAction($action) im Controller neu schreiben.
public function beforeAction($action) { $currentaction = $action->id; $novalidactions = ['dologin']; if(in_array($currentaction,$novalidactions)) { $action->controller->enableCsrfValidation = false; } parent::beforeAction($action); return true; }
Der übergebene Parameter $action ist der Controller Dieses zugriffsinstanziierte Objekt enthält zahlreiche Informationen, die Sie ausdrucken und anzeigen können.
Führen Sie zuerst $action->id aus, um den Aktionsnamen des aktuellen Zugriffs zu erhalten. Und $novalidactions ist ein Array, das die Aktionsnamen enthält. Bei diesen Aktionen handelt es sich um alle Vorgänge, die Sie zum Deaktivieren der CSRF-Authentifizierung benötigen (Vorgänge, die zum Deaktivieren der CSRF-Authentifizierung erforderlich sind).
Ob sich die aktuell aufgerufene Aktion in diesen $novalidactions befindet. Wenn dies der Fall ist, bedeutet dies, dass diese Aktion die CSRF-Funktion deaktivieren muss. Stellen Sie daher die Controller-Instanz auf
$action->controller->enableCsrfValidation = false
(4) Was passiert, wenn es teilweise eingeschaltet ist?
request => [ 'enableCookieValidation' => false, ]
public $enableCsrfValidation = true
public function beforeAction($action) { $currentaction = $action->id; $accessactions = ['dologin']; i f(in_array($currentaction,$accessactions)) { $action->controller->enableCsrfValidation = true; } parent::beforeAction($action); return true; }
Verwandte Empfehlungen:
Detaillierte Erläuterung der restful API-Autorisierungsüberprüfung von yii2
Das obige ist der detaillierte Inhalt vonDetaillierte Erklärung des lokalen Schalters von yii2 csrf. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!