微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

php – codeigniter 2以及如何为TinyMCE禁用xss

香港专业教育学院搜索包括stackoverflow在内的每个站点.

我已经全局启用了XSS,并且我使用了TinyMCE.在那些页面上,我希望TinyMCE部分没有启用XSS.

在阅读了大约40页后,他们都说要做以下事情:

$tiny_mce = $this->input->post('note'); // xss filtering off

要么

$tiny_mce = $this->input->post('note', FALSE); // xss filtering off

我试过了两个,这是我的模特:

public function edit($id) {

          $tiny_mce = $this->input->post('note'); // xss filtering off
          $userId = $this->ion_auth->get_user_id();
          $data = array(
                        'note' => $tiny_mce
                        ,'postedBy' => $userId);
          $this->db->where('id', $id);
          $this->db->update('company_notes', $data);

}

有谁知道为什么它不工作?任何帮助都会很棒!我真的不想全局关闭XSS,所以我希望“
每个基础“方法.

编辑
我刚试过

public function edit($id) {
          $this->config->set_item('global_xss_filtering', FALSE);
          $tiny_mce = $this->input->post('note'); // xss filtering off
          $userId = $this->ion_auth->get_user_id();
          $data = array(
                        'note' => $tiny_mce
                        ,'postedBy' => $userId);
          $this->db->where('id', $id);
          $this->db->update('company_notes', $data);

}

但那也行不通.

解决方法:

Controller初始化后无法禁用XSS过滤.

因为如果启用$config [‘global_xss_filtering’] = TRUE;在config.PHP文件中,CodeIgniter在初始化控制器,模型和…之前对$_POST,$_GET,$_COOKIE执行XSS过滤

因此,当您访问Controller时,一切都已完成.

虽然解决方案是禁用$config [‘global_xss_filtering’]并根据需要对特定变量运行XSS过滤,但有一种方法可以保留原始值(预过滤)以便以后使用它们:

1)在application / config.PHP中将$config [‘enable_hooks’]设置为TRUE.

2)将以下内容插入application / config / hooks.PHP

$hook['pre_controller'] = array(
    'class'    => '',
    'function' => 'keep_vars',
    'filename' => 'keep_vars.PHP',
    'filepath' => 'hooks',
    'params'   => array($_POST, $_GET)
);

注意:我们使用此Hook在Controller初始化之前执行keep_vars()函数(您可能还需要考虑使用’pre_system’键).

3)使用以下内容在application / hooks /目录中创建keep_vars.PHP

<?PHP

function keep_vars ($vars = array())
{
    if (empty($vars)) return;

    global $pre_filter;

    $pre_filter = array();

    foreach ($vars as $var) {
        $pre_filter = array_merge($pre_filter, $var);
    }
}

4)最后,当您想要访问控制器中$_GET或$_POST中的变量时,在方法中定义全局$pre_filter变量:

class Foo extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
    }

    public function bar ()
    {
        // define as global
        global $pre_filter;

        // check the pre XSS filtered values
        print_r($pre_filter);

        // you can get access to pre filtered $_POST['key'] by:
        echo $pre_filter['key'];
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐