我在配置文件中将global_xss_filtering设置为TRUE。是否可以禁用特定数据的xss过滤 - 假设我想禁用'title'后置变量的xss过滤。
有可能吗?
答案 0 :(得分:1)
嗯,据我所知,你可以制作一些小黑客。 您转到输入类(system / core / input.php)并更改$ xss_clean参数的默认值。 本地它设置为FALSE,因此您可以通过将TRUE传递给$ this-> input-> post()或get()来选择更改它。
使用post()的示例(在input.php的第128行),但您还需要应用于get。
/**
* Fetch an item from the POST array
*
* @access public
* @param string
* @param bool
* @return string
*/
function post($index = NULL, $xss_clean = TRUE) // <-- Here I changed the default from FALSE to TRUE)
{
// Check if a field has been provided
if ($index === NULL AND ! empty($_POST))
{
$post = array();
// Loop through the full _POST array and return it
foreach (array_keys($_POST) as $key)
{
$post[$key] = $this->_fetch_from_array($_POST, $key, $xss_clean);
}
return $post;
}
return $this->_fetch_from_array($_POST, $index, $xss_clean);
}
现在,您关闭全局过滤(将其设置为FALSE)。现在,您的输入将被自动过滤,除非您将FALSE指定为调用的第二个参数,例如$this->input->post('title',FALSE).
你可以选择(而不是黑客攻击核心)想要扩展本机输入库,这样你就可以传递一个TRUE而不是FALSE,这就是:
class MY_Input extends CI_Input {
function __construct()
{
parent::__construct();
}
//........
function get($index = NULL, $xss_clean = TRUE)
{
return parent::get($index, $xss_clean);
}
//...........
function post($index = NULL , $xss_clean = TRUE)
{
return parent::post($index, $xss_clean);
}
}
它应该以相同的方式工作,并且每次更改时都不需要破解核心文件。
请阅读手册中的extending the core页面以获得更好的信息。