回调函数的 XSS 筛选



据我之前的帖子所知,xss_clean将在调用$this->form_validation->run()后过滤$this->input->post('text_url')。问题是它还会在回调函数中过滤$this->input->post('textarea_content')吗?

谢谢

$this->form_validation->set_rules('text_url', 'Website link', 'trim|xss_clean|callback_minimum_fields[' . $this->input->post('textarea_content') . ']');
$this->form_validation->run();
//Filtered
$text_url = $this->input->post('text_url');
//Filtered as well?
$textarea_content = $this->input->post('textarea_content');

回调

public function minimum_fields($url, $content)
{
    if ($url == '' && $content == '')
    {
        $this->form_validation->set_message('minimum_fields', 'Please provide info for at least one of these: "Website link" and "Content".');
        return false;
    }
    return true;
}
//Filtered as well?
$textarea_content = $this->input->post('textarea_content');

不可以,您没有在表单验证中设置"准备"规则。事实上,您根本没有验证textarea_content字段。

除此之外,您在设置规则时尚未运行表单验证,因此将任何 POST 数据传递到回调函数中都将是原始数据。

将这样的帖子数据传递到这里的回调中,其中规则只是字符串,是非常危险的,并且可能会破坏您的脚本。考虑:

$_POST['textarea_content'] = ']|var_dump|exit|some_nonsense[';
$this->form_validation->set_rules(
    'text_url',
    'Website link',
    'callback_minimum_fields[' . $this->input->post('textarea_content') . ']'
);
// Produces this rule:
// callback_minimum_fields[]|var_dump|exit|some_nonsense[]

这些"规则"将被注入到表单验证规则中,因为在这种情况下,它只是一个字符串。最好让回调直接读取 postdata 或采用其他方法,但这非常不安全。即使你先xss_clean它,也没关系。

再一次,我敦促您花更多时间了解XSS是什么,然后决定在这种情况下担心是否有任何意义。XSS 只出现在输出上。

因此,当然显而易见的事情是选择一个字段,使其成为必填字段,然后将必需字段放入验证中。但是,如果您所说的是 - 这些字段中的一个或另一个是必需的 - 您不妨在字段验证后将其作为单独的检查。

从可用性的角度来看,这是有道理的 - 正常的验证是按字段进行的。 错误消息与字段相关联。 如果您有涉及多个字段的要求 - 则该消息应单独显示。

这是用于XSS清洁的简单CI提示,只需使用TRUE,例如:

// adding TRUE means we are filtered
$text_url = $this->input->post('text_url', TRUE);
$textarea_content = $this->input->post('textarea_content', TRUE);
 // check if both fields came back blank
if( $text_url == '' && $textarea_content == '' ) 
{
// validation failed, show the form again, make your own message to pass to view
}
else
{
// its all good
} 

最新更新