Yii框架開發安全考慮

這篇文章是作爲補充Yii框架開發安全考慮,因爲Yii教程裏幾經含有了開發過程中需要考慮的安全教程。 但是基於那個教程裏沒有提到所有常見的web攻擊,所以在這裏補充兩個最常見的web攻擊: SQL注入式和Magic URL.

SQL注入式

SQL注入式是一種最常見並且最容易實現的一個web應用的攻擊,這個攻擊已經在最近的幾年內上升爲第一個web開發的安全問題。這種攻擊發生於當你(開發者)獲取用戶的輸入值,並直接把它作爲純Sql語句對數據庫進行查詢而造成的。這種攻擊可以篡改,刪除數據,甚至可以公開一個商業的用戶資料。

舉一個簡單例子,假設你有這樣的一個SQL語句:

"Select * from User where username=".$username;

其中$username是你從用戶端獲取的值。如果用戶是個有經驗的開發者,他很容易就可以猜到你的sql語句大概是什麼樣。那麼他可以提供這樣的值,比如: ” ‘john’ or 1=1″, 如果你直接把這個值放入到sql語句中,那麼語句就變成了:

"Select * from User where username='john' or 1=1";

可以看到,你如果懂的一些Sql,這個語句將會在你數據庫表格獲取所有的用戶數據, 那麼這些數據就有被公開的危險性, 這是個簡單的例子,但是很好了說明了這個攻擊是怎麼發生的。

那麼什麼防範措施可以起到保護數據作用呢?這裏給幾個建議:1. 檢查,過濾任何從用戶端接收到的數據,不用相信任何用戶的數據。2. 避免直接在控制層寫 Sql語句,如果你一定要,請實行第一步操作。3. 儘量把sql語句寫在模型層,並儘量使用內嵌的API如 find(),findAll()等待。4. 使用Criteria 來創建數據查詢代碼,這種方式創建的sql語句將會自動消除注入式sql語句,起到防範作用。

Magic URL

另一個攻擊你需要注意的是Magic URL.這個攻擊發生於,在開發者把Url的參數作爲調用其他函數的參數並直接執行它。

特別注意的是Yii框架的架構已經具有被攻擊的潛在可能。如果沒有合適的用戶驗證措施和其他對策,攻擊者可能能夠刪除你在數據庫中的所有數據。

讓我們看看一個具體的例,假設你有一個ImageController其中包含常用的方法:

Class ImageController extends Controller{
    public function accessRules(){
         ...
         array('allow', 'actions'=>array('delete'),'users'=>array('*'),
         ...
    }
    public function actionCreate(){
         ....
    }
    ...
    public function actionDelete($id){
         $this->loadModel($id)->delete();
    }
}

你可以從上面的代碼看到,這種控制類允許身份驗證的用戶來執行刪除操作。因此,一個情景可以是用戶點擊一個圖片下的“刪除”按鈕,然後將圖像記錄從數據庫表中刪除。但是,就這麼簡單嗎?如果您有一些關於HTTP URL的知識,那麼你知道這個刪除操作的URL可能是:

http://yourdomain.com/image/delete?id=3

或其他相似的。現在也許變得清晰,如果你的數據庫設計只是簡單的增加了數字來改變圖片記錄的ID,那麼可能會發生攻擊是通過簡單地改變URL中的ID值來刪除由另一個用戶擁有的圖片記錄,因此這是一個不安全的代碼設計。

防範措施:

  1. 通過檢查用戶的角色授權操作,考慮使用基於角色的訪問控制(RBAC)。
  2. 避免使用GET方法,如果一個HttP請求的結果在服務器端有改變模型狀態的作用,請使用POST並通過這個: Yii::app()->request->isPostRequest 來檢查一個請求是否是AJAX.
  3. 檢查,過濾任何從用戶端接收到的數據,不用相信任何用戶的數據。
  4. 提高訪問規則的門檻,給用戶留下最少特權。
轉載自http://www.yiiwiki.com/wiki/view/id/15/title/Yii%E6%A1%86%E6%9E%B6%E5%BC%80%E5%8F%91%E5%AE%89%E5%85%A8%E8%80%83%E8%99%91
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章