2011-07-05 38 views
0

TLDR;我想在替換邪惡數據時啓用xss_clean()的數據庫日誌記錄。擴展CodeIgniter Security.php以啓用日誌記錄


我希望能夠在Security.php的xss_clean()函數的數據庫日誌,基本上是我想要做的是要知道,如果我用料成功被認定xss_clean()輸入到有惡意其中的數據被過濾掉或沒有。

所以基本上:

$str = '<script>alert();</script>'; 
$str = xss_clean($str); 

什麼理想地發生對我來說是:

  1. 清潔來自XSS字符串
  2. 返回乾淨$海峽
  3. 關於邪惡數據輸入信息(並最終登錄的用戶)到數據庫

據我在Security.php文件中可以看到,沒有任何東西可以幫我處理這個問題,或者可以通過掛鉤等方式處理。我當然可能會誤會。

由於沒有記錄在Security.php中創建多少個替換 - 我是否被迫擴展Security.php,將當前代碼複製粘貼到原始函數中,並改變它以支持它?或者有沒有一種解決方案更加乾淨和安全的CodeIgniter的未來更新(尤其是文件被篡改/擴展)?

回答

1

您需要擴展Security類,但如果您需要的只是輸入/輸出的日誌,則完全不需要複製和粘貼任何代碼。沿着以下線的東西會允許你這樣做:

Class My_Security extends CI_Security { 

    public function xss_clean($str, $is_image = FALSE) { 
     // Do whatever you need here with the input ... ($str, $is_image) 

     $str = parent::xss_clean($str, $is_image); 

     // Do whatever you need here with the output ... ($str) 

     return $str; 
    } 

} 

這樣的話,你只是包裝現有的功能,並與輸入/輸出搞亂。如果您擔心底層方法的更改,則可以通過使用PHP函數get_args來透明地傳遞參數對象,從而實現更向前兼容。

+0

好的,這解決了我的一半問題。現在我正試圖弄清楚如何實際加載我的模型。這是正確的嗎?我試着做'$ this-> load = load_class('Loader','core');'然後執行'$ this-> load-> model('users_model');'但是我得到一個白色屏幕'$這 - >負載>模型();' – Tobias