2011-07-05 25 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