クロスサイト リクエスト フォージェリ (英語: Cross-site request forgery) は、ワンクリック攻撃またはセッション ライディングとも呼ばれ、通常 CSRF または XSRF と略されます。 は一種の脅迫です。ユーザー 現在ログインしている Web アプリケーションに対して意図しない操作を実行する攻撃手法。
クロスサイト リクエスト攻撃とは、簡単に言えば、攻撃者が何らかの技術的手段を使用して、ユーザーのブラウザをだまして、認証済みで実行している Web サイトにアクセスさせることです。一部の操作 (電子メールの送信、メッセージの送信、さらには送金や商品の購入などのプロパティ操作など)。 (推奨学習: yii フレームワーク)
ブラウザが認証されているため、訪問した Web サイトはそれを実際のユーザー操作であるとみなして実行します。
これは、Web のユーザー認証の脆弱性を悪用します。単純な認証では、リクエストが特定のユーザーのブラウザからのものであることのみを保証できますが、リクエスト自体がユーザーによって自発的に発行されたものであることは保証できません。
yii2 の csrf の検証メカニズムを簡単に紹介します。
csrf 検証に使用されるトークン値を取得します。csrf に使用されるトークンが存在するかどうかを確認します。存在しない場合は、generateCsrfToken() を使用して生成します。
web\Controller の beforeAction() メソッドに、csrf の検証に使用される Yii::$app->getRequest()->validateCsrfToken() 判定があることを確認します。
一般に、yii2 の csrf についての私の理解は、Yii::$app->request->getCsrfToken(); から始まります。OK、getCsrfToken() から始めましょう。このメソッドは yii\web\Request.php にあります:
/** * Returns the token used to perform CSRF validation. * 返回用于执行CSRF验证的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为空则调用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(); //生成随机的安全字符串 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; } /** * 每次调用控制器中的方法的时候都会调用下面的Yii::$app->getRequest()->validateCsrfToken()验证 * @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; } } /** * 校验方法 * 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()这个我也不太理解,还请指点一下 } } /** * @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; //验证从客户端获取的csrf的token和真实的token是否相等 }
以上がyii csrfとは何ですかの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

Yiiは開発者にとって強力な選択肢です。 1)YIIは、MVCアーキテクチャに基づいた高性能PHPフレームワークであり、ActiverCord、GII、Cache Systemsなどのツールを提供します。 2)その利点には効率と柔軟性が含まれますが、学習曲線は急で、コミュニティのサポートは比較的限られています。 3)高性能と柔軟性を必要とするプロジェクトに適していますが、チームのテクノロジースタックと学習コストを考慮してください。

YIIフレームワークは、エンタープライズレベルのアプリケーション、中小規模のプロジェクト、個々のプロジェクトに適しています。 1)エンタープライズレベルのアプリケーションでは、YIIの高性能とスケーラビリティにより、eコマースプラットフォームなどの大規模なプロジェクトでは傑出しています。 2)中小規模のプロジェクトでは、YIIのGIIツールがプロトタイプとMVPを迅速に構築するのに役立ちます。 3)個人およびオープンソースのプロジェクトでは、Yiiの軽量機能により、小さなWebサイトやブログに適しています。

YIIフレームワークは、効率的で安全でスケーラブルなWebアプリケーションを構築するのに適しています。 1)YIIはMVCアーキテクチャに基づいており、コンポーネントの設計とセキュリティ機能を提供します。 2)基本的なCRUD操作と高度なRestfulapi開発をサポートします。 3)ロギングやデバッグツールバーなどのデバッグスキルを提供します。 4)パフォーマンスの最適化には、キャッシュと怠zyなロードを使用することをお勧めします。

Yiiの目的は、開発者がWebアプリケーションを迅速かつ効率的に構築できるようにすることです。その実装は、次の方法を通じて実装されます。1)コンポーネントベースの設計とMVCアーキテクチャは、コードの保守性と再利用性を向上させます。 2)GIIツールは、開発速度を改善するためのコードを自動的に生成します。 3)怠zyな負荷とキャッシュメカニズムの最適化パフォーマンス。 4)サードパーティライブラリの統合を容易にする柔軟なスケーラビリティ。 5)複雑なビジネスロジックを処理するRBAC関数を提供します。

yiiisversatileavssustable ofallsizes.1)simple sites、yiioofferseassetupandrapiddevelopment.2)forcomplexprojects、itModularityandrbacsystemmanageScalabilityandsecurity効果的。

YIIフレームワークは、PHPフレームワークの将来の開発において引き続き重要な役割を果たします。 1)YIIは、効率的なMVCアーキテクチャ、強力なORMシステム、ビルトインキャッシュメカニズム、リッチ拡張ライブラリを提供します。 2)コンポーネント設計と柔軟性により、複雑なビジネスロジックと安らかなAPI開発に適しています。 3)YIIは、マイクロサービスやコンテナ化などの最新のPHP機能と技術的なトレンドに適応するために絶えず更新されています。

YIIフレームワークは、あらゆるサイズのWebアプリケーションの開発に適しており、その利点は高性能で豊富な機能セットにあります。 1)YIIはMVCアーキテクチャを採用しており、そのコアコンポーネントにはActiverCord、ウィジェット、GIIツールが含まれます。 2)要求処理プロセスを通じて、YIIはHTTP要求を効率的に処理します。 3)基本的な使用法は、コントローラーとビューを作成する簡単な例を示しています。 4)高度な使用は、ActiverCordを介したデータベース操作の柔軟性を示しています。 5)デバッグスキルには、デバッグツールバーとロギングシステムの使用が含まれます。 6)パフォーマンスの最適化キャッシュとデータベースクエリの最適化を使用し、コーディング仕様と依存関係インジェクションに従ってコードの品質を向上させることをお勧めします。

Yii2には、エラープロンプトを表示する主な方法が2つあります。 1つは、Yii :: $ app-&amp; gt; errorhandler-&amp; gt; exception()を使用して、例外が発生したときにエラーを自動的にキャッチおよび表示することです。もう1つは、$ this-&amp; gt; adderror()を使用することです。これは、モデル検証が失敗したときにエラーを表示し、$ model&amp; gt; getErrors()を介してビューでアクセスできます。ビューでは、if($ errors = $ model-&amp; gt; getErrors())を使用できます。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

WebStorm Mac版
便利なJavaScript開発ツール

DVWA
Damn Vulnerable Web App (DVWA) は、非常に脆弱な PHP/MySQL Web アプリケーションです。その主な目的は、セキュリティ専門家が法的環境でスキルとツールをテストするのに役立ち、Web 開発者が Web アプリケーションを保護するプロセスをより深く理解できるようにし、教師/生徒が教室環境で Web アプリケーションを教え/学習できるようにすることです。安全。 DVWA の目標は、シンプルでわかりやすいインターフェイスを通じて、さまざまな難易度で最も一般的な Web 脆弱性のいくつかを実践することです。このソフトウェアは、

SublimeText3 英語版
推奨: Win バージョン、コードプロンプトをサポート!

EditPlus 中国語クラック版
サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

メモ帳++7.3.1
使いやすく無料のコードエディター

ホットトピック









