YII Framework框架教程之安全方案詳解
本文講述了YII Framework框架的安全方案。分享給大家供大家參考,具體如下:
web應(yīng)用的安全問題是很重要的,在“黑客”盛行的年代,你的網(wǎng)站可能明天都遭受著攻擊,為了從某種程度上防止被攻擊,YII提供了防止攻擊的幾種解決方案。當(dāng)然這里講的安全是片面的,但是值得一看。
官方提供的解決方案有:如下
1. 跨站腳本攻擊的防范
跨站腳本攻擊(簡稱 XSS),即web應(yīng)用從用戶收集用戶數(shù)據(jù)。 攻擊者常常向易受攻擊的web應(yīng)用注入JavaScript,VBScript,ActiveX,HTML或 Flash來迷惑訪問者以收集訪問者的信息。 舉個例子,一個未經(jīng)良好設(shè)計的論壇系統(tǒng)可能不經(jīng)檢查就顯示用戶所輸入的內(nèi)容。 攻擊者可以在帖子內(nèi)容中注入一段惡意的JavaScript代碼。 這樣,當(dāng)其他訪客在閱讀這個帖子的時候,這些JavaScript代碼就可以在訪客的電腦上運(yùn)行了。
一個防范XSS攻擊的最重要的措施之一就是:在顯示用戶輸入的內(nèi)容之前進(jìn)行內(nèi)容檢查。 比如,你可以對內(nèi)容中的HTML進(jìn)行轉(zhuǎn)義處理。但是在某些情況下這種方法就不可取了,因?yàn)檫@種方法禁用了所有的HTML標(biāo)簽。
Yii集成了HTMLPurifier并且為開發(fā)者提供了一個很有用的組件CHtmlPurifier, 這個組件封裝了HTMLPurifier類。它可以將通過有效的審查、安全和白名單功能來把所審核的內(nèi)容中的所有的惡意代碼清除掉,并且確保過濾之后的內(nèi)容過濾符合標(biāo)準(zhǔn)。
CHtmlPurifier組件可以作為一個widget或者filter來使用。 當(dāng)作為一個widget來使用的時候,CHtmlPurifier可以對在視圖中顯示的內(nèi)容進(jìn)行安全過濾。 以下是代碼示例:
<?php $this->beginWidget('CHtmlPurifier'); ?> //...這里顯示用戶輸入的內(nèi)容... <?php $this->endWidget(); ?>
2. 跨站請求偽造攻擊的防范
跨站請求偽造(簡稱CSRF)攻擊,即攻擊者在用戶瀏覽器在訪問惡意網(wǎng)站的時候,讓用戶的瀏覽器向一個受信任的網(wǎng)站發(fā)起攻擊者指定的請求。 舉個例子,一個惡意網(wǎng)站有一個圖片,這個圖片的src地址指向一個銀行網(wǎng)站:http://bank.example/withdraw?transfer=10000&to=someone。 如果用戶在登陸銀行的網(wǎng)站之后訪問了這個惡意網(wǎng)頁,那么用戶的瀏覽器會向銀行網(wǎng)站發(fā)送一個指令,這個指令的內(nèi)容可能是“向攻擊者的帳號轉(zhuǎn)賬10000元”。 跨站攻擊方式利用用戶信任的某個特定網(wǎng)站,而CSRF攻擊正相反,它利用用戶在某個網(wǎng)站中的特定用戶身份。
要防范CSRF攻擊,必須謹(jǐn)記一條:GET請求只允許檢索數(shù)據(jù)而不能修改服務(wù)器上的任何數(shù)據(jù)。 而POST請求應(yīng)當(dāng)含有一些可以被服務(wù)器識別的隨機(jī)數(shù)值,用來保證表單數(shù)據(jù)的來源和運(yùn)行結(jié)果發(fā)送的去向是相同的。
Yii實(shí)現(xiàn)了一個CSRF防范機(jī)制,用來幫助防范基于POST的攻擊。 這個機(jī)制的核心就是在cookie中設(shè)定一個隨機(jī)數(shù)據(jù),然后把它同表單提交的POST數(shù)據(jù)中的相應(yīng)值進(jìn)行比較。
默認(rèn)情況下,CSRF防范是禁用的。如果你要啟用它,可以編輯應(yīng)用配置 中的組件中的CHttpRequest部分。
代碼示例:
return array( 'components'=>array( 'request'=>array( 'enableCsrfValidation'=>true, ), ), );
要顯示一個表單,請使用CHtml::form而不要自己寫HTML代碼。因?yàn)镃Html::form可以自動地在表單中嵌入一個隱藏項(xiàng),這個隱藏項(xiàng)儲存著驗(yàn)證所需的隨機(jī)數(shù)據(jù),這些數(shù)據(jù)可在表單提交的時候發(fā)送到服務(wù)器進(jìn)行驗(yàn)證。
3. Cookie攻擊的防范
保護(hù)cookie免受攻擊是非常重要的。因?yàn)閟ession ID通常存儲在Cookie中。 如果攻擊者竊取到了一個有效的session ID,他就可以使用這個session ID對應(yīng)的session信息。
這里有幾條防范對策:
您可以使用SSL來產(chǎn)生一個安全通道,并且只通過HTTPS連接來傳送驗(yàn)證cookie。這樣攻擊者是無法解密所傳送的cookie的。
設(shè)置cookie的過期時間,對所有的cookie和seesion令牌也這樣做。這樣可以減少被攻擊的機(jī)會。
防范跨站代碼攻擊,因?yàn)樗梢栽谟脩舻臑g覽器觸發(fā)任意代碼,這些代碼可能會泄露用戶的cookie。
在cookie有變動的時候驗(yàn)證cookie的內(nèi)容。
Yii實(shí)現(xiàn)了一個cookie驗(yàn)證機(jī)制,可以防止cookie被修改。啟用之后可以對cookie的值進(jìn)行HMAC檢查。
Cookie驗(yàn)證在默認(rèn)情況下是禁用的。如果你要啟用它,可以編輯應(yīng)用配置 中的組件中的CHttpRequest部分。
代碼示例:
return array( 'components'=>array( 'request'=>array( 'enableCookieValidation'=>true, ), ), );
一定要使用經(jīng)過Yii驗(yàn)證過的cookie數(shù)據(jù)。使用Yii內(nèi)置的cookies組件來進(jìn)行cookie操作,不要使用$_COOKIES。
// 檢索一個名為$name的cookie值 $cookie=Yii::app()->request->cookies[$name]; $value=$cookie->value; ...... // 設(shè)置一個cookie $cookie=new CHttpCookie($name,$value); Yii::app()->request->cookies[$name]=$cookie;
更多關(guān)于Yii相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Yii框架入門及常用技巧總結(jié)》、《php優(yōu)秀開發(fā)框架總結(jié)》、《smarty模板入門基礎(chǔ)教程》、《php日期與時間用法總結(jié)》、《php面向?qū)ο蟪绦蛟O(shè)計入門教程》、《php字符串(string)用法總結(jié)》、《php+mysql數(shù)據(jù)庫操作入門教程》及《php常見數(shù)據(jù)庫操作技巧匯總》
希望本文所述對大家基于Yii框架的PHP程序設(shè)計有所幫助。
- 記錄Yii2框架開發(fā)微信公眾號遇到的問題及解決方法
- 使用YII2框架實(shí)現(xiàn)微信公眾號中表單提交功能
- 完美利用Yii2微信后臺開發(fā)的系列總結(jié)
- Yii PHP Framework實(shí)用入門教程(詳細(xì)介紹)
- YII Framework框架使用YIIC快速創(chuàng)建YII應(yīng)用之migrate用法實(shí)例詳解
- YII Framework框架教程之使用YIIC快速創(chuàng)建YII應(yīng)用詳解
- Yii Framework框架獲取分類下面的所有子類方法
- YiiFramework入門知識點(diǎn)總結(jié)(圖文教程)
- YII Framework框架教程之緩存用法詳解
- YII Framework框架教程之國際化實(shí)現(xiàn)方法
- Yii Framework框架開發(fā)微信公眾平臺示例
相關(guān)文章
tp5(thinkPHP5)框架連接數(shù)據(jù)庫的方法示例
這篇文章主要介紹了tp5(thinkPHP5)框架連接數(shù)據(jù)庫的方法,結(jié)合實(shí)例形式較為詳細(xì)的分析了基于thinkPHP5框架連接數(shù)據(jù)庫的相關(guān)配置、數(shù)據(jù)讀取、模板渲染等操作技巧,需要的朋友可以參考下2018-12-12- php5.3是php5的一個里程碑,加入了大量新特性。本文主要給大家介紹了php5.3的一個新功能--延遲靜態(tài)綁定,希望能夠?qū)Υ蠹矣兴鶐椭?/div> 2016-01-01
調(diào)試WordPress中定時任務(wù)的相關(guān)PHP腳本示例
這篇文章主要介紹了調(diào)試WordPress中定時任務(wù)的相關(guān)PHP腳本示例,針對使用Cron API及wp_schedule_event()函數(shù)來寫的定時任務(wù),需要的朋友可以參考下2015-12-12詳解php幾行代碼實(shí)現(xiàn)CSV格式文件輸出
本篇文章主要介紹了詳解php幾行代碼實(shí)現(xiàn)CSV格式文件輸出,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07Laravel 5框架學(xué)習(xí)之路由、控制器和視圖簡介
這篇文章主要介紹了Laravel 5框架學(xué)習(xí)之路由、控制器和視圖簡介,十分的細(xì)致全面,需要的朋友可以參考下2015-04-04在php中設(shè)置session用memcache來存儲的方法總結(jié)
memcached提供了一個自定義的session處理器可以被用于存儲用戶session數(shù)據(jù)到memcached服務(wù)端,下面通過本文給大家介紹在php中設(shè)置session用memcache來存儲的方法總結(jié),對php session memcache相關(guān)知識感興趣的朋友一起學(xué)習(xí)吧2016-01-01最新評論