1. 程式人生 > >yii2框架-yii2區域性關閉(開啟)csrf的驗證(十七)

yii2框架-yii2區域性關閉(開啟)csrf的驗證(十七)

上一節主要是簡單地說了一下關於yii2的防禦csrf的攻擊機制,接下來說一下關於如何全域性和區域性的開啟使用csrf。
(1)全域性使用,我們直接在配置檔案中設定enableCookieValidation為true
request => [
	'enableCookieValidation' => true,
]
如果不需要使用csrf的話,設定'enableCookieValidation' => false,但是這是不安全的,因此yii2的yii\web\request中的enableCookieValidation預設設定為true的,也就是預設開啟csrf的,所以我們也可以不配置這個值,預設開啟。

如果開啟csrf,因為這是全域性的,所以在任何的post請求都會要求認證,所以我們在post資料的時候,就必須設定csrf的資料隱藏在表單中。

<input type="hidden" name="_csrf" id='csrf' value="<?= Yii::$app->request->csrfToken ?>">
post資料的時候必須要把這個值post過去,這個值的產生<?= Yii::$app->request->csrfToken ?>,返回一個加密後的csrfToken。

所以無論是post表單還是ajax的post過去,都必須設定csrfToken這個值,並且要提交時要post過去。如果沒有的話,就會發生錯誤,無法認證通過。

(2)如果想在某些控制器不想使用csrf驗證的話,又該如何做呢?
方法很簡單,直接設定

public $enableCsrfValidation = false ,

因為這個Controller繼承與yii\web\Controller ,將相當於繼承於enableCsrfValidation這個屬性,那麼在建立控制器例項時,就會在這個控制器關閉csrf功能,訪問這個控制器的post的方式時,也就不會進行驗證。
舉一個例子,比如我們開發API的時候,微信那邊的介面需要post資料給我們的介面時,由於微信端不知道csrfToken,所以訪問post資料的時候,如果開啟全域性csrf的話,那肯定不能訪問成功的。所以這時就需要關閉這個API 的csrf。

3)如果要具體關閉至某一個action呢?
有時在一些功能中,我們需要在某一個action中關閉csrf驗證。我們知道對於csrf的驗證是在beforeAction($Action)中實現的,下面我們可以在Controller中重寫beforeAction($action)這個方法

public function beforeAction($action) {

	$currentaction = $action->id;

	$novalidactions = ['dologin'];

	if(in_array($currentaction,$novalidactions)) {

    	$action->controller->enableCsrfValidation = false;
    }
	parent::beforeAction($action);

	return true;
}
傳入的引數$action是controller針對這個訪問例項化的物件,裡面包含很多資訊,大家可以列印看看。
首先執行$action->id獲取當前的訪問的action名稱。而$novalidactions是一個數組,裡面是action名稱,這些action都是是你需要關閉csrf的認證的操作(需要關閉csrf認證的操作)。
通過當前的訪問的action是否在這個$novalidactions中,如果在,說明這個action需要關閉csrf功能,所以就將這個控制器例項的設定為

$action->controller->enableCsrfValidation = false
接下來再執行parent::beforeAction($action),此時傳入來的$action裡的controller例項的enableCsrfValidation已變為false。
最後一定要返回true,否則的話,不會往下執行action操作的。

(4)如果區域性開啟呢?
首先在配置檔案要設定
request => [
'enableCookieValidation' => false,
]
全域性不使用csrf。

(a)要在控制器中開啟,只需要設定
public $enableCsrfValidation = true
則整個控制器都會開啟

(b)要在action中開啟
public function beforeAction($action) {
$currentaction = $action->id;
$accessactions = ['dologin'];
if(in_array($currentaction,$accessactions)) {
              $action->controller->enableCsrfValidation = true;
 }

        parent::beforeAction($action);
       return true;
}

$accessactions是需要開啟csrf的action的名稱,將設定$action->controller->enableCsrfValidation = true,當前操作可以開啟csrf。

友情推薦

本人已開源基於swoole擴充套件實現的輕量級框架

https://github.com/bingcool/swoolefy



相關推薦

yii2框架-yii2區域性關閉(開啟)csrf驗證()

上一節主要是簡單地說了一下關於yii2的防禦csrf的攻擊機制,接下來說一下關於如何全域性和區域性的開啟使用csrf。(1)全域性使用,我們直接在配置檔案中設定enableCookieValidation為truerequest => [ 'enableCookieV

yii2框架-yii2的防禦csrf攻擊機制(六)

前段時間工作比較忙,好幾天沒有時間寫一下關於yii2框架的知識總結了。因為上一次需要實現一些功能防禦csrf的這種攻擊,所以整理一下這方面的知識點。 對於什麼是csrf,中文名稱:跨站請求偽造,可以在百度上搜索資料,詳細瞭解這一方面的概念。對於我們是非常有幫助的。 yii2

yii2中自定義表單或者post請求 csrf驗證(防跨站偽請求)

第一種解決辦法是關閉Csrf public function init(){ $this->enableCsrfValidation = false; } 第二種解決辦法是在form表單中加入csrf隱藏域表單。表單名根據我們的cookie設定

yii2框架開發之安全xss、csrf、sql注入、檔案上傳漏洞攻擊

常見的漏洞攻擊:1、xss:是跨站指令碼攻擊    分3類:1、儲存型2、反射型3、蠕蟲型2、csrf:是跨站請求偽造攻擊    分2類:1、get型2、post型3、sql注入4、檔案上傳xss攻擊:xss攻擊可以:盜取使用者賬號、也可以盜取後進行非法轉賬、還可以篡改系統資

yii2 框架的 AR 和 DAO 增刪改查

寫法 mod sar 增刪改查 title isn function rec 自己 自己做個總結 方便以後查找使用 /** * yii 的增刪改查 */ //增 public function add1($data) {

yii2框架安裝

tps iso cmd命令 oca pos test ref index abi =======================   PHP版本要求:PHP5.4以上 ======================= 【通過Composer安裝】 1.安裝compos

python中django框架csrf驗證

驗證 觸發 pwd checkbox 參數 setup quest class 設置 在form表單以post的方式提交時,django默認會帶一個驗證的機制csrf驗證 <form action="/day02/login/" method="post">

Yii2框架RESTful API教程(一) - 快速入門

比較 exp values cnblogs -- restful extends .cn pat 前不久做一個項目,是用Yii2框架寫一套RESTful風格的API,就去查了下《Yii 2.0 權威指南 》,發現上面寫得比較簡略。所以就在這裏寫一篇教程貼,希望幫助剛接觸Yi

Yii2框架RESTful API教程(二) - 格式化響應,授權認證和速率限制

formatter loginurl 而不是 filters ica cat 表示 程序 ssi 之前寫過一篇Yii2框架RESTful API教程(一) - 快速入門,今天接著來探究一下Yii2 RESTful的格式化響應,授權認證和速率限制三個部分 一、目錄結構 先

centos下使用composer安裝yii2框架

執行 一個 賬號 basic bsp http sset composer 下使用 一:安裝composer curl -s http://getcomposer.org/installer | php mv composer.phar /usr/local/bin/co

laravel 關閉 csrf 驗證

kernel alt bubuko csrf laravel 技術分享 span 驗證 分享 csrf驗證失敗 註釋掉kernel.php 的 csrf 行代碼 laravel 關閉 csrf 驗證

Yii2.0中(Hash is invalid error)驗證錯誤

yii2 fun 輸入 方式 swd 數據庫 null 數據 字符 老項目數據遷移到Yii2.0後,密碼仍使用md5加密。但是通過yii2.0的驗證類的validatePassword($password)函數驗證始終返回false: public function va

用composer 安裝yii2框架

版本 結果 cto -a get nss 全局配置 rep php5 Windows安裝Composer:一、下載Composer官網下載:https://getcomposer.org/download/ 二、開啟PHP的openssl支持(php版本一定大於5.4)修改

YII2框架AJAX請求報500錯誤的處理方法

初接觸YII2時,雖然也是MVC,但對其執行機制一臉懵逼,需求用到AJAX,使用原生的jquery寫法 $.post()進行的請求發現一個問題。剛開始是400,瀏覽器直接訪問連結是可以的。但是用AJAX請求是錯誤的,查看了手冊才發現,需要csrf的認證。 這個問題解決方法至少有三種: 1.c

關於YII2框架-jQuery(…).activeform is not a function in 解決方法

在使用YII2框架過程中遇到過控制檯報出一個JS錯誤,jQuery(…).activeform is not a function,檢視原始碼看到這裡。 確定一下yii框架這個檔案有沒有載入 yii.activeForm.js 沒有的話,那麼問題原因就找到了。 解決方案有很多種

新建yii2框架目錄下.htaccess檔案

Options +FollowSymLinks IndexIgnore */* RewriteEngine on # if a directory or a file exists, use it directly RewriteCond %{REQUEST_FILENAME} !-f R

yii2框架下載與安裝

1、下載composer(https://getcomposer.org/Composer-Setup.exe)  2、安裝composer(路徑選擇為php.exe所在路徑,且確保php.ini中openssl開啟,php版本在5.5以上) 3、進入網站目錄,以此為例(D:\phps

YII2框架中的偽靜態設定

第一步:修改apache中的配置檔案httpd.conf 1.開啟apache的mod_rewrite模組 去掉該選項前面的井號,開啟該選項LoadModule rewrite_module modules/mod_rewrite.so 2.搜尋AllowOv

[PHP]Yii2框架的坑

Yii2框架的幾個隱蔽的坑 摘要:Yii2是一款優秀的通用Web後端框架,結構簡單優雅、實用功能豐富、擴充套件性強、效能搞是他最突出的優點。它優秀的地方你在使用過程中總能輕易的發現,無須贅述。而這些隱蔽的小瑕疵,顯得更有必要告訴大家。 目錄 說點閒話 距離上

yii2 框架資料庫常用操作

1.先配置好資料庫位置在common/config/main-local.php更改如下:<?phpreturn [    'class' => 'yii\db\Connection',    'dsn' => 'mysql:host=localhost;d