2015-04-23 60 views
1

我需要通過URL保護我的web應用程序免受xss攻擊。 這樣做的最好方法是什麼? 該應用程序是巨大的,所以我不能編輯每個動作,需要一些一般。Yii上的XSS保護

實例:

+0

與任何其他的框架/生PHP。在打印出來時對您的內容進行編碼。'echo $ model-> attribute'是錯的 - 'echo CHtml :: encode($ model-> attribute)'是好的。 'htmlentities'是通用的PHP方法。 ? '\ yii \ helpers \ Html :: encode($ model-> attribute)'是Yii2的。 – h2ooooooo

回答

0

在相同的所有操作只需添加一個事件句柄onBeginRequest:

$this->attachEventHandler('onBeginRequest', [$this, 'purifyParams']); 



public function purifyParams($event) 
{ 
    $userAgent = $this->getRequest()->getUserAgent(); 
    $isIE = preg_match('/(msie)[ \/]([\w.]+)/i', $userAgent, $version); 
    if (!empty($isIE) && (int) $version[2] < 11) { 
     $purifier = new CHtmlPurifier(); 
     $_GET = array_map(function ($param) use ($purifier) { 
      return $purifier->purify($param); 
     }, $_GET); 
    } 
} 
1

如果你打算在處理它們之前操作你的動作,你可以在你的控制器/組件中使用beforeAction,是這樣的:

protected function beforeAction($action) {   

    #check a preg_match on a url sanitization pattern, like "[^-A-Za-z0-9+&@#/%?=~_|!:,.;\(\)]", for instance 

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

articles展示瞭如何讓您的應用系統與SQL注入,跨站腳本攻擊和跨站請求僞造。

希望它可以幫助你。

+0

hepers是屬性,在任何行動。在同一時間,我需要一個解決方案。 –

0

首先,你可以使用正則表達式來驗證您的輸入,您可以在一些正規的expresions推廣你的投入,這樣的事情:

$num = $_GET["index"]; 

if (preg_match("^\d{2}$", $num)) { 
    //allowed 
} else { 
    //not allowed 
} 

您也可以創建白名單或黑名單,如果你的輸入可以分組到您的應用程序允許的內容中,使用白名單,否則使用黑名單。此列表可以在您的數據庫或文件中進行查找,您可以輕鬆升級,而不會影響您的應用程序。在執行輸入之前,您只需將輸入與該列表進行比較。

我最後的建議是編碼,你應該編碼你的輸入和輸出,因爲你的數據庫中的數據可以包含惡意代碼,也許有人把它錯誤或惡作劇,總是考慮所有可能性。對於這種情況,我記得函數htmlspecialcharsutf8_encode,我認爲你應該第一個函數,也可以分析你的輸入並建立你自己的編碼函數。

我分享以下鏈接:

我希望這些信息對您有所幫助。

祝你好運。