香港专业教育学院搜索了包括*在内的每个站点.
我已经全局启用了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'];
}
}