Heim  >  Artikel  >  Backend-Entwicklung  >  Code zum teilweisen Ein- und Ausschalten der CSRF-Überprüfung in yii2

Code zum teilweisen Ein- und Ausschalten der CSRF-Überprüfung in yii2

小云云
小云云Original
2018-02-08 09:32:531270Durchsuche

Dieser Artikel stellt Ihnen hauptsächlich den Beispielcode zum teilweisen Schließen (Öffnen) der CSRF-Überprüfung in yii2 vor. Der Herausgeber findet es ziemlich gut, deshalb möchte ich es jetzt mit Ihnen teilen und es als Referenz für alle zur Verfügung stellen. Folgen wir dem Herausgeber und schauen wir uns das an. Ich hoffe, es kann allen helfen.

(1) Für die globale Verwendung setzen wir „enableCookieValidation“ direkt in der Konfigurationsdatei auf „true“


request => [ 
  'enableCookieValidation' => true, 
]

Wenn Sie dies nicht tun Ich muss es nicht verwenden. Setzen Sie für csrf 'enableCookieValidation' => false, aber das ist unsicher, daher ist enableCookieValidation in yiiwebrequest von yii2 standardmäßig auf true gesetzt, was bedeutet, dass csrf standardmäßig aktiviert ist, sodass wir diesen Wert auch nicht konfigurieren können und aktivieren Sie es standardmäßig.

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.

Code kopieren Der Code lautet wie folgt:


090c4e8f35bdb8fe7b736f5c926feb6crequest->csrfToken ?>">

Beim Posten von Daten müssen Sie diesen Wert posten. Die Generierung dieses Werts383effb76a410f3838d3b14ab8483ff7request->csrfToken ?>, gibt ein verschlüsseltes csrfToken zurück.

Ob es sich also um ein Post-Formular oder einen Ajax-Beitrag 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 und wird direkt festgelegt


public $enableCsrfValidation = false ,

Da dieser Controller von yiiwebController erbt, entspricht er Wenn Sie vom Attribut „enableCsrfValidation“ erben, wird beim Erstellen einer Controller-Instanz die CSRF-Funktion in diesem Controller deaktiviert und beim Zugriff auf den Beitrag dieses Controllers 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


public function beforeAction($action) { 
 
  $currentaction = $action->id; 
 
  $novalidactions = ['dologin']; 
 
  if(in_array($currentaction,$novalidactions)) { 
 
    $action->controller->enableCsrfValidation = false; 
  } 
  parent::beforeAction($action); 
 
  return true; 
}

neu schreiben Die übergebene $action ist das vom Controller für diesen Zugriff instanziierte Objekt. Es enthält viele Informationen, die Sie ausdrucken und sehen 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
Führen Sie als Nächstes parent::beforeAction($action) aus. Zu diesem Zeitpunkt hat sich die enableCsrfValidation der Controller-Instanz in der eingehenden $action auf false geändert.


Muss am Ende true zurückgeben, sonst wird die Aktionsoperation nicht ausgeführt.

(4) Was passiert, wenn es teilweise eingeschaltet ist?

Stellen Sie zunächst



request => [
'enableCookieValidation' => false,
]
ein, um csrf nicht global in der Konfigurationsdatei zu verwenden.

(a) Um es im Controller einzuschalten, stellen Sie einfach



public $enableCsrfValidation = true
ein und der gesamte Controller wird eingeschaltet

(b) Zum Aktivieren von



public function beforeAction($action) {
$currentaction = $action->id;
$accessactions = ['dologin'];
i f(in_array($currentaction,$accessactions)) {
       $action->controller->enableCsrfValidation = true;
 }

    parent::beforeAction($action);
    return true;
}
$accessactions ist der Name der Aktion, die csrf und $action->controller aktivieren muss wird auf ->enableCsrfValidation = true gesetzt, der aktuelle Vorgang kann csrf aktivieren.


Verwandte Empfehlungen:


Detaillierte Erklärung des lokalen Schalters von yii2 csrf

Behebung des 400-Fehlers danach Aktivieren von CSRf

Yii2.0-Verteidigung gegen CSRF-Angriffe

Das obige ist der detaillierte Inhalt vonCode zum teilweisen Ein- und Ausschalten der CSRF-Überprüfung in yii2. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn