扩展CodeIgniter Security.php以启用日志记录

时间:2011-07-05 22:19:51

标签: mysql codeigniter codeigniter-2

TLDR;我想在替换邪恶数据时启用xss_clean()的数据库记录。


我想在Security.php中启用xss_clean()函数的数据库日志记录,基本上我想要做的是知道我正在成功输入xss_clean()的输入是否被识别为其中包含恶意数据被过滤掉了。

基本上是这样的:

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

理想情况下,我会发生什么:

  1. 从XSS
  2. 清除字符串
  3. 返回干净的$ str
  4. 将有关恶意数据(最终登录用户)的信息输入数据库
  5. 据我所知,在Security.php文件中,没有什么可以解决这个问题,或者可以通过钩子等方式来解决这个问题。我当然可能会弄错。

    由于没有记录在Security.php中进行了多少替换 - 我是否被迫扩展Security.php,复制粘贴原始函数中的当前代码并更改它以支持此功能?或者是否有一个更清洁,更安全的解决方案,以便将来更新CodeIgniter(尤其是被篡改/扩展的文件)?

1 个答案:

答案 0 :(得分: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透明地传递参数对象,从而更加向前兼容。