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

标签 php codeigniter tinymce codeigniter-2

我在这个问题上搜索了每个网站,包括 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.php 文件中启用 $config['global_xss_filtering'] = TRUE;,CodeIgniter 会对 $_POST 执行 XSS 过滤>、$_GET$_COOKIE 在初始化 ControllersModels 和 ...

之前

因此,当您访问 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) 最后,当您想要访问 Controller 中的 $_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'];
    }
}

关于php - codeigniter 2 以及如何为 TinyMCE 禁用 xss,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17686074/

相关文章:

c# - 文字换行以适合一定比例(不是大小)的矩形

php - 如何将同一表中的多行连接成一行

javascript - 如何在 TinyMCE 中设置响应式文件管理器返回绝对 url

asp.net - 如何允许在 TinyMCE 中嵌入内联标签

php - 为什么 Chrome 不缓存我的动态表单字段?

php - json_encode 在使用 jquery.get() 发布数据时将数组作为字符串返回

php - 计算mysql结果的平均值php

移动设备上的 PHP 强制下载 header 失败

php - 如果自动加载,则阻止 codeigniter session 库发送 set-cookie header 参数

javascript - tinyMCE SetContent() 导致撤消步骤