我在这个问题上搜索了每个网站,包括 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
在初始化 Controllers
、Models
和 ...
因此,当您访问 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/