ホームページ  >  記事  >  php教程  >  csrf 攻撃手法に対する Yii2.0 の防御

csrf 攻撃手法に対する Yii2.0 の防御

黄舟
黄舟オリジナル
2017-01-03 09:46:161525ブラウズ

yii2 では、テスト ツール POSTMAN、コマンド ライン CURL リクエスト、または ajax リクエストのいずれを使用しても、常に http400: Bad Request エラーが発生します。Web ページを使用して GET にアクセスすると (POST の制限が解除されます)、 verbFilter)、それは正常です

情報を確認した後、これが CRSF 検証の理由であることがわかりました

原則:

Cookie ハッシュにより、サーバーからクライアントに送信されるすべてのフォームにランダムな値 _csrf でマークを付けることができます。同時に、関連付けられたトークンをクライアントの COOKIE に保存します。

検証中、サーバーはリクエスト _POST() から受信した入力 hidden _csrf をクライアントの COOKIE 内のトークンと比較するたびに

攻撃者の攻撃の原理これは、クライアントの COOKIE を使用することですが、攻撃者は使用する COOKIE の特定の内容を取得できません (Web サイトの XSS 脆弱性により、ユーザーの Cookie は簡単に盗まれてしまうため、XSS 攻撃の可能性は脇に置きます)。さらに 1%。通常、攻撃者はハッシュ値を計算する必要があると判断すると基本的にあきらめます)。したがって、攻撃者は攻撃 URL にトークンを追加できず、検証に失敗します。

攻撃者は (理論上) サードパーティ Cookie を取得できないため、これが最も簡単な解決策になる可能性があります。そのため、フォーム内のデータは構築されません。

解決策:

1.禁用CRSF验证(不推荐):'enableCsrfValidation' => false,

'components' => [
'request' => [
'cookieValidationKey' => '83r5HbITBiMfmiYPOZFdL-raVp4O1VV4',
'enableCookieValidation' => false,
'enableCsrfValidation' => false,
]

2. データが送信されるときに、キャリーします。 csrf 情報

a. コンポーネント ActiveForm を呼び出すと、送信されたデータは自動的に _csrf

b を取得し、Ajax で送信する場合は (以下に示すように) ヘッダーで csrf 情報を取得し、データと一緒に送信できます。

csrf 攻撃手法に対する Yii2.0 の防御

c. CSRF 情報は php からも取得できます



Yii::$app->request->csrfParam;(获取csrf-param)
Yii::$app->request->csrfToken;(获取csrf-token)

上記は、CSRF 攻撃に対する Yii2.0 の防御の内容です。詳細については、PHP 中国語に注意してください。ウェブサイト (www.php.cn)!


声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。