亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > PHP > 正文

yii2對csrf攻擊的防范措施

2020-03-22 17:33:53
字體:
來源:轉載
供稿:網友
這篇文章主要介紹了關于yii2對csrf攻擊的防范措施,有著一定的參考價值,現在分享給大家,有需要的朋友可以參考一下

今天北哥就給大家普及下csrf是啥?如果你已經知道了可以直接拉文章到底部點個贊。

CSRF(Cross-site request forgery跨站請求偽造)是一種對網站的惡意利用,在 2007 年曾被列為互聯網 20 大安全隱患之一。

關于CSRF,要從一個故事開始~

老王丟錢事件

這個故事要從程序員老王丟了1萬塊錢說起,總之是進了小偷,找回無果。丟錢后的老王一直在思考,錢是怎么丟的、為何丟錢、為何是我丟錢~~

后來老王出現了嚴重的心理問題,他決定報復社會。

老王首先研究了網銀系統,他發現轉賬是通過GET形式

http://bank.abc.com/withdraw?account=liuxiaoer amount=1000 to=abei

這意思就是說將 liuxiaoer 的1000元錢轉給abei,當然當請求到達銀行服務器后,程序會驗證該請求是否來自合法的session并且該session的用戶就是 liuxiaoer 并且已經登錄。

老王自己也有一個銀行賬號 wang2,他嘗試登錄并且通過瀏覽器發送請求給銀行,代碼如下

http://bank.abc.com/withdraw?account=liuxiaoer amount=1000 to=wang2

失敗了~因為當前登錄賬號是老王自己,發送請求后服務器發現session所屬用戶wang2和account=liuxiaoer并不是一個人,因此被拒絕。

也就是說這個操作必須是 liuxiaoer 自己才可以,復仇的力量是可怕的,老王通過facebook層層找到了 liuxiaoer 就是快遞員老劉的銀行賬號。

于是一個偉大的計劃誕生了,老王的計劃是這樣的。

1、首先做一個網頁,在網頁中加入如下代碼

src= http://bank.abc.com/withdraw?account=liuxiaoer amount=1000 to=wang2 

然后通過各種情景讓老劉(liuxiaoer)訪問了此網頁。

2、當老劉(liuxiaoer)訪問此網頁后,上面的請求會被發送到銀行,此刻還會帶著老劉(liuxiaoer)自己的瀏覽器cookie信息,當然這樣一般也不會成功,因為銀行服務器發現老劉(liuxiaoer)并不在登錄狀態。

3、老王想了一個招,他在淘寶找了一個灰色商人老李,讓他通過種種方法,總之讓老劉(liuxiaoer)通過瀏覽器給老李轉了一次款。

4、就在第三步操作的2分鐘內,老王成功讓老劉(liuxiaoer)再一次訪問了自己做的網頁,你知道的,此刻老劉(liuxiaoer)在銀行的session還沒有過期,老王網頁給銀行服務器發送請求后,驗證通過,打款成功。

5、老王收到了款,老劉(liuxiaoer)并不知道這一切,對于銀行來說這是一筆在正常不過的轉賬。

這就是CSRF攻擊,瀏覽器無法攔截。

CSRF攻擊特點

基于上面血淋淋的故事,我們總結下CSRF攻擊的幾個特點。

黑客借助于受害者的cookie等瀏覽器信息騙取服務器新人,黑客并拿不到cookie等。

由于瀏覽器同源策略,黑客無法拿到攻擊的響應結果,能做的只是發起請求,你是否還記得很多釣魚網站都模擬了登錄框么?

CSRF攻擊主要是發送修改數據請求。

CSRF防御對象

因此我們要保護的是所有能引起數據變化的客戶端請求,比如新建、更新和刪除。

CSRF防御方案

基于CSRF攻擊特點,在業界目前防御 CSRF 攻擊主要有三種策略:

驗證 HTTP Referer 字段;

在請求地址中添加 token 并驗證;

在 HTTP 頭中自定義屬性并驗證。

HEEP Referer

在http請求的時候,頭部有一個叫做Referer的字段,該字段記錄本次請求的來源地址。因此服務器端可以通過此字段是否為同一個域名來判斷請求是否合法,因為客戶自己做的網頁發起的請求,其Referer為黑客網站。

這種方法最簡單,并且不需要修改業務代碼,我們只需要對到達服務器的每個請求做一次攔截分析即可。

但是此方法的缺點也是明顯的,因為Referer的值是瀏覽器的,雖然HTTP協議不允許去修改,但是如果瀏覽器自身存在漏洞,那么就有可能導致Referer被人工設置,不安全。

比如IE6,就可以通過方法篡改Referer值。

就算是最新的瀏覽器此方法也不是絕對可用的,這涉及了用戶的隱私,很多用戶會設置瀏覽器不提供Referer,因此服務器在得不到Referer的情況下不能貿然的決絕服務,有可能這是一個合法請求。

添加Token

CSRF攻擊之所以能成功,是因為黑客完全偽造了一次用戶的正常請求(這也是瀏覽器無法攔截的原因),并且cookie信息就是用戶自己的,那么我們如果在請求中放入一些黑客無法去偽造的信息(不存在與cookie中),不就可以抵御了么!

比如在請求前生成一個token放到session中,當請求發生時,將token從session拿出來和請求提交過來的token進行對比,如果相等則認證通過,否則拒絕。token時刻在變化,黑客無法去偽造。

針對于不同類型的請求一般方案是

GET 放到url中,比如http://url?csrftoken=xxxx

POST 放到表單的隱藏域 input type=”hidden” name=”csrftoken” html' target='_blank'>value=”xxxx”/

對于GET請求,這里有一點要說明,在一個網站中請求的url很多,一般情況我們是通過js對dom的所有節點進行遍歷,發現a鏈接就在其href中增加token。

這里存在一個問題,比如黑客將自己網站的鏈接發到了要攻擊頁面,則黑客網站鏈接后面會有一個token,此刻客戶可以通過編寫自己網站代碼得到這個token,然后用這個token立刻構造表單,發起CSRF攻擊,因此在js遍歷的時候,如果發現不是本站的鏈接,可以不加token。

在HTTP頭部增加屬性

這個方法在思路上和上面的token方式一樣,只不過將token放到了HTTP頭部中,不再參數傳遞,通過XMLHttpRequest類可以一次性的給所有請求加上csrftoken這個HTTP頭屬性并設置值。

這種方法適合上面批量添加token不方便的情況,一次性操作,不過局限性也比較大,XMLHttpRequest請求通常用在ajax方法中,并非所有請求都適合。

Yii2

首先要說的是每種CSRF防范措施都有其弊端,無論你的防范多么嚴密,黑客擁有更多的攻擊手段,因此在重要邏輯上(必須寫入和刪除)必須非常小心,接下來我們把yii2框架在csrf上的部署說一下。

我們以yii2.0.14為解說版本。

在CSRF這塊,yii2框架采取了HTTP頭部和參數token并行的方式,針對于每個請求,在beforeAction都會做一次判斷,如下

// vendor/yiisoft/yii2/web/Controller.phppublic 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; return false;}

如果我們沒有設置 enableCsrfValidation 為false,并且沒有報錯,則會進行csrf驗證,核心方法就是

Yii::$app- getRequest()- validateCsrfToken()

該方法存在于 vendor/yiisoft/yii2/web/Request.php 中,我們看一看它。

public function validateCsrfToken($clientSuppliedToken = null) { // 省略上面代碼 return $this- validateCsrfTokenInternal($this- getBodyParam($this- csrfParam), $trueToken) || $this- validateCsrfTokenInternal($this- getCsrfTokenFromHeader(), $trueToken);}

validateCsrfToken函數代碼我們只需要看最后的返回,getBodyParam或getCsrfTokenFromHeader方法得到的token,只要有一種驗證通過,就認為合法。

以上是整體的思路,為了讓你看的更清晰,我畫一個圖并增加一些名詞解釋。

1094681196-5b160d074ca04_articlex[1].png

以上是yii2的csrf策略部署,當然我還是推薦你使用 xdebug等調試工具 一步一步看看這個過程。

最后我在把上圖的關鍵函數進行說明

generateCsrfToken() 該函數生成token并存到cookie或session中,該值不會隨頁面刷新而變化,它更多充當鑰匙的作用,根絕它生成具體的csrfToken。

getCsrfToken() 生成具體的csrfToken,就是你在表單隱藏域中看到的那個值,這個值將來會傳到服務器和真實的csrfToken進行對比,驗證是否合法。

validateCsrfToken() 進行合法性驗證,該函數得到一個真實的csrfToken然后和客戶端上傳來的csrfToken進行對比。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP !

相關推薦:

如何在yii2-wx中使用try_catch

關于Yii2中GridView的用法總結

以上就是yii2對csrf攻擊的防范措施的詳細內容,PHP教程

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩中文有码在线视频| 成人伊人精品色xxxx视频| 欧美最近摘花xxxx摘花| 91高清视频在线免费观看| 亚洲一区二区精品| 久久免费福利视频| 日韩欧美在线免费观看| 国产精品一区二区久久精品| 98精品国产自产在线观看| 亚洲欧美一区二区三区情侣bbw| 中文欧美日本在线资源| 92裸体在线视频网站| 国内精久久久久久久久久人| 国产一区二区丝袜高跟鞋图片| 亚洲精品v欧美精品v日韩精品| 国产精品国产亚洲伊人久久| 亚洲欧美综合图区| 精品女厕一区二区三区| 色婷婷综合成人av| 美女少妇精品视频| 尤物99国产成人精品视频| 国产精品白丝av嫩草影院| 97久久精品在线| yw.139尤物在线精品视频| 欧美一级大片在线观看| 欧美巨乳美女视频| 日韩成人在线网站| 91在线中文字幕| 久久亚洲精品一区二区| 国产精品久久久91| 欧美激情视频一区| 亚洲黄色免费三级| 日韩电影免费观看在线| 亚洲激情免费观看| 久久久亚洲福利精品午夜| 国产精品一区二区三区免费视频| 国产精品对白刺激| 久久国产精品久久久久久| 日韩av免费在线| 亚洲成人精品视频在线观看| 最新国产成人av网站网址麻豆| 黄色精品在线看| 欧美在线一区二区三区四| 亚洲国产一区二区三区四区| 久久九九国产精品怡红院| 国产一区二区三区18| 最近中文字幕mv在线一区二区三区四区| 欧美色视频日本版| 日韩精品999| 国产精品丝袜一区二区三区| 91九色单男在线观看| 欧美性做爰毛片| 亚洲毛片在线看| 亚洲理论在线a中文字幕| 97久久伊人激情网| 成人国产亚洲精品a区天堂华泰| 亚洲激情在线观看视频免费| 国产精品福利在线| 91麻豆国产语对白在线观看| 亚洲一区美女视频在线观看免费| 亚洲精品电影在线| 欧美性videos高清精品| 搡老女人一区二区三区视频tv| 国产性色av一区二区| 日韩美女写真福利在线观看| 亚洲欧美综合区自拍另类| 亚洲国产精品久久精品怡红院| 少妇激情综合网| 欧美激情videoshd| 国产成+人+综合+亚洲欧美丁香花| 国产一区二区香蕉| 欧美日韩中文字幕日韩欧美| 国产精品国产福利国产秒拍| 欧美成人小视频| 亚洲欧美另类在线观看| 日韩一区二区av| 欧美日韩国产999| 中文字幕欧美日韩va免费视频| 欧美激情综合色综合啪啪五月| 日韩在线小视频| 伊人青青综合网站| 国产精品久久久久aaaa九色| 91色琪琪电影亚洲精品久久| 日韩成人在线网站| 日韩av免费一区| 日韩美女免费线视频| 国产日韩欧美91| 国产精品久久国产精品99gif| 黄色一区二区在线| 欧美亚洲国产视频小说| 亚洲精品97久久| 在线观看亚洲区| 国产精品视频公开费视频| 亚洲欧美在线磁力| 黑人精品xxx一区一二区| 国产精品黄视频| 欧美电影免费观看高清| 国产视频精品免费播放| 亚洲福利视频专区| 性色av一区二区三区红粉影视| 久热在线中文字幕色999舞| 国产精品久久久久久久av电影| 九九热精品在线| 国产精品丝袜一区二区三区| 亚洲欧美在线第一页| xxav国产精品美女主播| 欧美性猛交xxxx乱大交| 97在线精品视频| 亚洲va久久久噜噜噜久久天堂| 国产日韩精品在线播放| 深夜精品寂寞黄网站在线观看| 国产精品久久婷婷六月丁香| 亚洲国产又黄又爽女人高潮的| 国产精品美女主播在线观看纯欲| 国产精品久久中文| 欧洲精品在线视频| 日韩精品黄色网| 欧美一区二粉嫩精品国产一线天| 91在线精品视频| 中文字幕国产亚洲| 欧美精品videos另类日本| 国产中文字幕91| 精品久久久国产| 成人www视频在线观看| 欧美一级淫片aaaaaaa视频| 欧美日韩亚洲精品一区二区三区| 日韩精品欧美激情| 欧美精品videos另类日本| 亚洲欧美在线第一页| 亚洲女同性videos| 国产精品尤物福利片在线观看| 日本精品在线视频| 亚洲综合大片69999| 国产主播在线一区| 欧美另类69精品久久久久9999| 欧美一级免费看| 亚洲欧美日韩天堂一区二区| 国产精品久久一| 久久久精品一区二区| 国产综合久久久久| 日本成人在线视频网址| 亚洲人线精品午夜| 久久五月天色综合| 中文字幕亚洲天堂| 欧美日本高清视频| 欧美丝袜美女中出在线| 日韩综合视频在线观看| 中文字幕视频在线免费欧美日韩综合在线看| 青青草原一区二区| 97超级碰在线看视频免费在线看| 国产精品海角社区在线观看| 亚洲人免费视频| 欧美日在线观看| 亚洲成人精品视频在线观看| 久久久久久国产免费| 97av在线视频| 国产精品激情av在线播放| 久久免费视频这里只有精品| 日韩中文字幕在线| 亚洲最大福利网| 亚洲一级黄色av| 成人在线视频网站| 国产91精品青草社区| 亚洲美女喷白浆|