溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

YII Framework框架之安全方案的示例分析

發(fā)布時間:2021-08-30 14:51:20 來源:億速云 閱讀:142 作者:小新 欄目:開發(fā)技術(shù)

這篇文章給大家分享的是有關(guān)YII Framework框架之安全方案的示例分析的內(nèi)容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

具體如下:

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代碼就可以在訪客的電腦上運行了。

一個防范XSS攻擊的最重要的措施之一就是:在顯示用戶輸入的內(nèi)容之前進行內(nèi)容檢查。 比如,你可以對內(nèi)容中的HTML進行轉(zhuǎ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)容進行安全過濾。 以下是代碼示例:

<?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ù)器識別的隨機數(shù)值,用來保證表單數(shù)據(jù)的來源和運行結(jié)果發(fā)送的去向是相同的。

Yii實現(xiàn)了一個CSRF防范機制,用來幫助防范基于POST的攻擊。 這個機制的核心就是在cookie中設(shè)定一個隨機數(shù)據(jù),然后把它同表單提交的POST數(shù)據(jù)中的相應(yīng)值進行比較。

默認情況下,CSRF防范是禁用的。如果你要啟用它,可以編輯應(yīng)用配置 中的組件中的CHttpRequest部分。

代碼示例:

return array(
  'components'=>array(
    'request'=>array(
      'enableCsrfValidation'=>true,
    ),
  ),
);

要顯示一個表單,請使用CHtml::form而不要自己寫HTML代碼。因為CHtml::form可以自動地在表單中嵌入一個隱藏項,這個隱藏項儲存著驗證所需的隨機數(shù)據(jù),這些數(shù)據(jù)可在表單提交的時候發(fā)送到服務(wù)器進行驗證。

3. Cookie攻擊的防范

保護cookie免受攻擊是非常重要的。因為session ID通常存儲在Cookie中。 如果攻擊者竊取到了一個有效的session ID,他就可以使用這個session ID對應(yīng)的session信息。

這里有幾條防范對策:

您可以使用SSL來產(chǎn)生一個安全通道,并且只通過HTTPS連接來傳送驗證cookie。這樣攻擊者是無法解密所傳送的cookie的。

設(shè)置cookie的過期時間,對所有的cookie和seesion令牌也這樣做。這樣可以減少被攻擊的機會。

防范跨站代碼攻擊,因為它可以在用戶的瀏覽器觸發(fā)任意代碼,這些代碼可能會泄露用戶的cookie。

在cookie有變動的時候驗證cookie的內(nèi)容。

Yii實現(xiàn)了一個cookie驗證機制,可以防止cookie被修改。啟用之后可以對cookie的值進行HMAC檢查。

Cookie驗證在默認情況下是禁用的。如果你要啟用它,可以編輯應(yīng)用配置 中的組件中的CHttpRequest部分。

代碼示例:

return array(
  'components'=>array(
    'request'=>array(
      'enableCookieValidation'=>true,
    ),
  ),
);

一定要使用經(jīng)過Yii驗證過的cookie數(shù)據(jù)。使用Yii內(nèi)置的cookies組件來進行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 Framework框架之安全方案的示例分析”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,讓大家可以學(xué)到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI