国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

Heim PHP-Framework YII Was ist Yii CSRF?

Was ist Yii CSRF?

Dec 04, 2019 am 11:49 AM
yii

Cross-Site-Request-Forgery (Englisch: Cross-Site-Request-Forgery), auch bekannt als One-Click-Angriff oder Session-Riding, meist abgekürzt als CSRF oder XSRF, ist eine Art Benutzer Kontrolle Eine Angriffsmethode, die unbeabsichtigte Vorg?nge an der aktuell angemeldeten Webanwendung ausführt.

Was ist Yii CSRF?

Cross-Site-Request-Angriff Einfach ausgedrückt nutzt der Angreifer einige technische Mittel, um den Browser des Benutzers zu t?uschen, um auf eine von ihm authentifizierte Website zuzugreifen und diese auszuführen. Einige Vorg?nge (z. B. das Versenden von E-Mails, das Versenden von Nachrichten und sogar Immobilienvorg?nge wie das überweisen von Geld und der Kauf von Waren). (Empfohlenes Lernen: yii-Framework )

Da der Browser authentifiziert wurde, betrachtet die besuchte Website ihn als echten Benutzervorgang und führt ihn aus.

Hierbei wird eine Schwachstelle bei der Benutzerauthentifizierung im Web ausgenutzt: Eine einfache Authentifizierung kann nur garantieren, dass die Anfrage vom Browser eines bestimmten Benutzers kommt, kann aber nicht garantieren, dass die Anfrage selbst freiwillig vom Benutzer gestellt wird.

yii2s csrf, hier ist eine kurze Einführung in seinen Verifizierungsmechanismus.

Rufen Sie den für die CSRF-überprüfung verwendeten Token-Wert ab. Bestimmen Sie, ob das für die CSRF-überprüfung verwendete Token vorhanden ist. Verwenden Sie ?generateCsrfToken()“, um es zu generieren.

Stellen Sie sicher, dass die Methode beforeAction() im webController über die Beurteilung Yii::$app->getRequest()->validateCsrfToken() verfügt, die zur überprüfung von csrf verwendet wird.

Im Allgemeinen beginnt mein Verst?ndnis von yii2s csrf mit Yii::$app->request->getCsrfToken(); OK, beginnen wir mit getCsrfToken(). Diese Methode befindet sich in yiiwebRequest.php:

/**
 * Returns the token used to perform CSRF validation.
 * 返回用于執(zhí)行CSRF驗(yàn)證的token
 * This token is a masked version of [[rawCsrfToken]] to prevent [BREACH attacks](http://breachattack.com/).
 * This token may be passed along via a hidden field of an HTML form or an HTTP header value
 * to support CSRF validation.
 * @param boolean $regenerate whether to regenerate CSRF token. When this parameter is true, each time
 * this method is called, a new CSRF token will be generated and persisted (in session or cookie).
 * @return string the token used to perform CSRF validation.
 */
public function getCsrfToken($regenerate = false)
{
    if ($this->_csrfToken === null || $regenerate) {
        if ($regenerate || ($token = $this->loadCsrfToken()) === null) {    //loadCsrfToken()就是在cookie或者session中獲取token值
            $token = $this->generateCsrfToken();        //如果token為空則調(diào)用generateCsrfToken()去生成
        }
        // the mask doesn't need to be very random
        $chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_-.';
        $mask = substr(str_shuffle(str_repeat($chars, 5)), 0, static::CSRF_MASK_LENGTH);
        // The + sign may be decoded as blank space later, which will fail the validation
        $this->_csrfToken = str_replace('+', '.', base64_encode($mask . $this->xorTokens($token, $mask)));
    }

    return $this->_csrfToken;
}

/**
 * Loads the CSRF token from cookie or session.
 * @return string the CSRF token loaded from cookie or session. Null is returned if the cookie or session
 * does not have CSRF token.
 */
protected function loadCsrfToken()
{
    if ($this->enableCsrfCookie) {
        return $this->getCookies()->getValue($this->csrfParam);         //cookie中獲取csrf的token 
    } else {
        return Yii::$app->getSession()->get($this->csrfParam);          //session中獲取csrf的token
    }
}

/**
 * Creates a cookie with a randomly generated CSRF token.
 * Initial values specified in [[csrfCookie]] will be applied to the generated cookie.
 * @param string $token the CSRF token
 * @return Cookie the generated cookie
 * @see enableCsrfValidation
 */
protected function createCsrfCookie($token)
{
    $options = $this->csrfCookie;
    $options['name'] = $this->csrfParam;
    $options['value'] = $token;
    return new Cookie($options);
}

/**
 * Generates  an unmasked random token used to perform CSRF validation.
 * @return string the random token for CSRF validation.
 */
protected function generateCsrfToken()
{
    $token = Yii::$app->getSecurity()->generateRandomString();      //生成隨機(jī)的安全字符串
    if ($this->enableCsrfCookie) {
        $cookie = $this->createCsrfCookie($token);                  //createCsrfCookie()用于生成csrf的key=>value形式的token
        Yii::$app->getResponse()->getCookies()->add($cookie);       //將生成key=>value保存到cookies 
    } else {
        Yii::$app->getSession()->set($this->csrfParam, $token);     //將csrf的token存在session中
    }
    return $token;
}

/**
 * 每次調(diào)用控制器中的方法的時候都會調(diào)用下面的Yii::$app->getRequest()->validateCsrfToken()驗(yàn)證
 * @inheritdoc
 */
public function beforeAction($action)
{
    if (parent::beforeAction($action)) {
        if ($this->enableCsrfValidation && Yii::$app->getErrorHandler()->exception === null && !Yii::$app->getRequest()->validateCsrfToken()) {         
            throw new BadRequestHttpException(Yii::t('yii', 'Unable to verify your data submission.'));
        }
        return true;
    } else {
        return false;
    }
}


/**
 * 校驗(yàn)方法
 * Performs the CSRF validation.
 *
 * This method will validate the user-provided CSRF token by comparing it with the one stored in cookie or session.
 * This method is mainly called in [[Controller::beforeAction()]].
 *
 * Note that the method will NOT perform CSRF validation if [[enableCsrfValidation]] is false or the HTTP method
 * is among GET, HEAD or OPTIONS.
 *
 * @param string $token the user-provided CSRF token to be validated. If null, the token will be retrieved from
 * the [[csrfParam]] POST field or HTTP header.
 * This parameter is available since version 2.0.4.
 * @return boolean whether CSRF token is valid. If [[enableCsrfValidation]] is false, this method will return true.
 */
public function validateCsrfToken($token = null)
{
    $method = $this->getMethod();
    // only validate CSRF token on non-"safe" methods http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.1.1
    if (!$this->enableCsrfValidation || in_array($method, ['GET', 'HEAD', 'OPTIONS'], true)) {
        return true;
    }

    $trueToken = $this->loadCsrfToken();

    if ($token !== null) {
        return $this->validateCsrfTokenInternal($token, $trueToken);
    } else {
        return $this->validateCsrfTokenInternal($this->getBodyParam($this->csrfParam), $trueToken)
            || $this->validateCsrfTokenInternal($this->getCsrfTokenFromHeader(), $trueToken); 
            //getCsrfTokenFromHeader()這個我也不太理解,還請指點(diǎn)一下
    }
}

/**
 * @return string the CSRF token sent via [[CSRF_HEADER]] by browser. Null is returned if no such header is sent.
 */
public function getCsrfTokenFromHeader()
{
    $key = 'HTTP_' . str_replace('-', '_', strtoupper(static::CSRF_HEADER));
    return isset($_SERVER[$key]) ? $_SERVER[$key] : null;
}

/**
 * Validates CSRF token
 *
 * @param string $token
 * @param string $trueToken
 * @return boolean
 */
private function validateCsrfTokenInternal($token, $trueToken)
{
    $token = base64_decode(str_replace('.', '+', $token));      //解碼從客戶端獲取的csrf的token
    $n = StringHelper::byteLength($token);
    if ($n <= static::CSRF_MASK_LENGTH) {
        return false;
    }
    $mask = StringHelper::byteSubstr($token, 0, static::CSRF_MASK_LENGTH);
    $token = StringHelper::byteSubstr($token, static::CSRF_MASK_LENGTH, $n - static::CSRF_MASK_LENGTH);
    $token = $this->xorTokens($mask, $token);

    return $token === $trueToken;       //驗(yàn)證從客戶端獲取的csrf的token和真實(shí)的token是否相等
}

Das obige ist der detaillierte Inhalt vonWas ist Yii CSRF?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erkl?rung dieser Website
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

Hei?e KI -Werkzeuge

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem v?llig kostenlosen KI-Gesichtstausch-Tool aus!

Hei?e Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Hei?e Themen

PHP-Tutorial
1502
276
Yii2 vs. Phalcon: Welches Framework eignet sich besser für die Entwicklung von Grafik-Rendering-Anwendungen? Yii2 vs. Phalcon: Welches Framework eignet sich besser für die Entwicklung von Grafik-Rendering-Anwendungen? Jun 19, 2023 am 08:09 AM

Im aktuellen Informationszeitalter sind Big Data, künstliche Intelligenz, Cloud Computing und andere Technologien in den Fokus gro?er Unternehmen gerückt. Unter diesen Technologien hat die Grafikkarten-Rendering-Technologie als leistungsstarke Grafikverarbeitungstechnologie immer mehr Aufmerksamkeit erhalten. Die Grafikkarten-Rendering-Technologie wird h?ufig in der Spieleentwicklung, bei Film- und Fernsehspezialeffekten, im technischen Modellbau und in anderen Bereichen eingesetzt. Für Entwickler ist die Wahl eines Frameworks, das zu ihren Projekten passt, eine sehr wichtige Entscheidung. Unter den aktuellen Sprachen ist PHP eine sehr dynamische Sprache. Einige hervorragende PHP-Frameworks wie Yii2, Ph

Datenabfrage im Yii-Framework: Effizienter Zugriff auf Daten Datenabfrage im Yii-Framework: Effizienter Zugriff auf Daten Jun 21, 2023 am 11:22 AM

Das Yii-Framework ist ein Open-Source-PHP-Webanwendungsframework, das zahlreiche Tools und Komponenten zur Vereinfachung des Prozesses der Webanwendungsentwicklung bereitstellt, wobei die Datenabfrage eine der wichtigen Komponenten ist. Im Yii-Framework k?nnen wir eine SQL-?hnliche Syntax verwenden, um auf die Datenbank zuzugreifen und Daten effizient abzufragen und zu bearbeiten. Der Abfrage-Builder des Yii-Frameworks umfasst haupts?chlich die folgenden Typen: ActiveRecord-Abfrage, QueryBuilder-Abfrage, Befehlsabfrage und Original-SQL-Abfrage

Symfony vs Yii2: Welches Framework eignet sich besser für die Entwicklung umfangreicher Webanwendungen? Symfony vs Yii2: Welches Framework eignet sich besser für die Entwicklung umfangreicher Webanwendungen? Jun 19, 2023 am 10:57 AM

Da die Nachfrage nach Webanwendungen weiter w?chst, haben Entwickler bei der Auswahl von Entwicklungsframeworks immer mehr M?glichkeiten. Symfony und Yii2 sind zwei beliebte PHP-Frameworks. Sie verfügen beide über leistungsstarke Funktionen und Leistung. Welches Framework ist jedoch besser geeignet, wenn es darum geht, umfangreiche Webanwendungen zu entwickeln? Als n?chstes führen wir eine vergleichende Analyse von Symphony und Yii2 durch, um Ihnen zu helfen, eine bessere Wahl zu treffen. Grundlegende übersicht Symphony ist ein Open-Source-Webanwendungs-Framework, das in PHP geschrieben ist und darauf aufbaut

So entwickeln Sie mit dem PHP-Framework Yii ein hochverfügbares Cloud-Backup-System So entwickeln Sie mit dem PHP-Framework Yii ein hochverfügbares Cloud-Backup-System Jun 27, 2023 am 09:04 AM

Mit der kontinuierlichen Weiterentwicklung der Cloud-Computing-Technologie ist die Datensicherung zu etwas geworden, das jedes Unternehmen durchführen muss. In diesem Zusammenhang ist es besonders wichtig, ein hochverfügbares Cloud-Backup-System zu entwickeln. Das PHP-Framework Yii ist ein leistungsstarkes Framework, das Entwicklern dabei helfen kann, schnell leistungsstarke Webanwendungen zu erstellen. Im Folgenden wird vorgestellt, wie Sie mit dem Yii-Framework ein hochverfügbares Cloud-Backup-System entwickeln. Entwerfen des Datenbankmodells Im Yii-Framework ist das Datenbankmodell ein sehr wichtiger Teil. Denn das Datensicherungssystem erfordert viele Tabellen und Beziehungen

Was ist der Unterschied zwischen PHP -Framework Laravel und Yii Was ist der Unterschied zwischen PHP -Framework Laravel und Yii Apr 30, 2025 pm 02:24 PM

Die Hauptunterschiede zwischen Laravel und YII sind Designkonzepte, funktionale Eigenschaften und Nutzungsszenarien. 1. Laravel konzentriert sich auf die Einfachheit und das Vergnügen der Entwicklung und bietet reichhaltige Funktionen wie eloquentorm und handwerkliche Werkzeuge, die für schnelle Entwicklung und Anf?nger geeignet sind. 2.YII betont Leistung und Effizienz, eignet sich für Hochlastanwendungen und bietet effiziente Activerecord- und Cache-Systeme, verfügt jedoch über eine steile Lernkurve.

Yii mit Docker: Containerisierung und Bereitstellung Ihrer Anwendungen Yii mit Docker: Containerisierung und Bereitstellung Ihrer Anwendungen Apr 02, 2025 pm 02:13 PM

Zu den Schritten zum Containerieren und Bereitstellen von YII -Anwendungen mit Docker geh?ren: 1.. Erstellen Sie eine Dockerfile und definieren Sie den Bildaufbauprozess; 2. Verwenden Sie DockerCompon, um YII -Anwendungen und MySQL -Datenbank zu starten. 3.. Die Bildgr??e und -leistung optimieren. Dies beinhaltet nicht nur spezifische technische Operationen, sondern auch die Arbeitsprinzipien und Best Practices von Dockerfile, um eine effiziente und zuverl?ssige Bereitstellung zu gew?hrleisten.

Yii2 vs Symfony: Welches Framework ist besser für die API-Entwicklung? Yii2 vs Symfony: Welches Framework ist besser für die API-Entwicklung? Jun 18, 2023 pm 11:00 PM

Mit der rasanten Entwicklung des Internets sind APIs zu einer wichtigen M?glichkeit geworden, Daten zwischen verschiedenen Anwendungen auszutauschen. Daher wird es immer wichtiger, ein API-Framework zu entwickeln, das einfach zu warten, effizient und stabil ist. Bei der Auswahl eines API-Frameworks sind Yii2 und Symfony zwei beliebte Optionen unter Entwicklern. Welches ist also besser für die API-Entwicklung geeignet? In diesem Artikel werden diese beiden Frameworks verglichen und einige Schlussfolgerungen gezogen. 1. Grundlegende Einführung Yii2 und Symfony sind ausgereifte PHP-Frameworks mit entsprechenden Erweiterungen, die zur Entwicklung verwendet werden k?nnen

Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus Yii2-Programmierhandbuch: So führen Sie den Cron-Dienst aus Sep 01, 2023 pm 11:21 PM

Wenn Sie fragen: ?Was ist Yii?“ schauen Sie sich mein vorheriges Tutorial an: Einführung in das Yii Framework, das die Vorteile von Yii bespricht und die Neuerungen in Yii 2.0 beschreibt, das im Oktober 2014 ver?ffentlicht wurde. Hmm> In dieser Serie ?Programmieren mit Yii2“ werde ich die Leser in die Verwendung des Yii2PHP-Frameworks einführen. Im heutigen Tutorial werde ich Ihnen zeigen, wie Sie die Konsolenfunktionalit?t von Yii nutzen k?nnen, um Cron-Jobs auszuführen. In der Vergangenheit habe ich wget – eine über das Internet zug?ngliche URL – in einem Cron-Job verwendet, um meine Hintergrundaufgaben auszuführen. Dies wirft Sicherheitsbedenken auf und hat einige Leistungsprobleme zur Folge. W?hrend ich in unserer Serie ?Sicherheit für Startup“ einige M?glichkeiten zur Risikominimierung besprochen habe, hatte ich gehofft, auf konsolengesteuerte Befehle umsteigen zu k?nnen

See all articles