這篇文章主要介紹PHP開發(fā)中csrf攻擊如何防范,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)公司服務緊隨時代發(fā)展步伐,進行技術(shù)革新和技術(shù)進步,經(jīng)過十載的發(fā)展和積累,已經(jīng)匯集了一批資深網(wǎng)站策劃師、設(shè)計師、專業(yè)的網(wǎng)站實施團隊以及高素質(zhì)售后服務人員,并且完全形成了一套成熟的業(yè)務流程,能夠完全依照客戶要求對網(wǎng)站進行成都網(wǎng)站建設(shè)、網(wǎng)站建設(shè)、建設(shè)、維護、更新和改版,實現(xiàn)客戶網(wǎng)站對外宣傳展示的首要目的,并為客戶企業(yè)品牌互聯(lián)網(wǎng)化提供全面的解決方案。csrf攻擊,即cross site request forgery跨站(域名)請求偽造,這里的forgery就是偽造的意思。網(wǎng)上有很多關(guān)于csrf的介紹,比如一位前輩的文章CSRF的攻擊方式詳解,參考這篇文章簡單解釋下:csrf 攻擊能夠?qū)崿F(xiàn)依賴于這樣一個簡單的事實:我們在用瀏覽器瀏覽網(wǎng)頁時通常會打開好幾個瀏覽器標簽(或窗口),假如我們登錄了一個站點A,站點A如果是通過cookie來跟蹤用戶的會話,那么在用戶登錄了站點A之后,站點A就會在用戶的客戶端設(shè)置cookie,假如站點A有一個頁面siteA-page.php(url資源)被站點B知道了url地址,而這個頁面的地址以某種方式被嵌入到了B站點的一個頁面siteB-page.php中,如果這時用戶在保持A站點會話的同時打開了B站點的siteB-page.php,那么只要siteB-page.php頁面可以觸發(fā)這個url地址(請求A站點的url資源)就實現(xiàn)了csrf攻擊。
1,背景和正常的請求流程
A站點域名為html5.yang.com,它有一個/get-update.php?uid=uid&username=username地址,可以看到這個地址可以通過get方法來傳遞一些參數(shù),假如這個頁面的邏輯是:它通過判斷uid是否合法來更新username,這個頁面腳本如下:
"; } else { die('更新失敗'); }
正常情況下這個頁面的鏈接是放在站點A下面的,比如A站點的csrfdemo.php頁面,用戶登錄站點A以后可以通過點擊這個鏈接來發(fā)送請求,比如站點A有一個頁面腳本,包含了這個鏈接:
"; } ?> 更新用戶名為json
加載這個頁面如下:
用點擊頁面中的鏈接來到get-update.php頁面:
上面是正常的請求流程,下面來看B站點是如何實現(xiàn)csrf攻擊的。
2,csrf攻擊的最簡單實現(xiàn)
B站點域名為test.yang.com,它有一個頁面csrf.php,只要用戶在維持A站點會話的同時打開了這個頁面,那么B站點就可以實現(xiàn)csrf攻擊。至于為什么會打開......,其實這種情景在我們?yōu)g覽網(wǎng)頁時是很常見的,比如我在寫這篇博客時,寫著寫著感覺對csrf某個地方不懂,然后就百度了,結(jié)果百度出來好多結(jié)果,假如說有個網(wǎng)站叫csrf百科知識,這個網(wǎng)站對csrf介紹的非常詳細、非常權(quán)威,那么我很可能會點進去看,但是這個網(wǎng)站其實是個釣魚網(wǎng)站,它在某個訪問頻率很高的頁面中嵌入了我博客編輯頁面的url地址,那么它就可以實現(xiàn)對我博客的csrf攻擊。好了,言歸正傳,下面來看下csrf.php腳本代碼:
可以看到上面的代碼沒有php代碼,只有一個img標簽,img標簽的src就是A站點的那個更新用戶名的鏈接,只不過把username改為了jsonp,訪問站點B的csrf.php這個頁面:
下面再來訪問下A站點的csrfdemo.php頁面:
可以看到用戶名被修改為了jsonp。
簡單分析下:B站點的這個csrf.php利用了html中的img標簽,我們都知道img標簽有個src屬性,屬性值指向需要加載的圖片地址,當頁面載入時,加載圖片就相當于向src指向的地址發(fā)起http請求,只要把圖片的地址修改為某個腳本地址,這樣自然就實現(xiàn)了最簡單的csrf攻擊。如此說來,其實csrf很容易實現(xiàn),只不過大家都是“正人君子”,誰沒事會閑著去做這種“下三濫”的事情。但是害人之心不可有,防人之心不可無。下面看下如何簡單防范這種最簡單的csrf攻擊。
3,簡單防范措施
其實防范措施也比較簡單,A站點可以在get-update.php腳本中判斷請求頭的來源,如果來源不是A站點就可以截斷請求,下面在get-update.php增加些代碼:
但是,這樣就萬事大吉了嗎,如果http請求頭被偽造了呢?A站點升級了防御,B站點同時也可以升級攻擊,通過curl請求來實現(xiàn)csrf,修改B站點的csrf.php代碼如下:
這樣同樣可以實現(xiàn)csrf攻擊的目的。那么就沒有比較好的防范方法了嗎?
以上是“PHP開發(fā)中csrf攻擊如何防范”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
本文題目:PHP開發(fā)中csrf攻擊如何防范-創(chuàng)新互聯(lián)
分享路徑:http://weahome.cn/article/iphic.html