我正在处理其他人构建的代码。我看到配置中的xss处于活动状态:
global_xss_filtering = TRUE
我也看到这个已被弃用。我也在Input类中找到了:
$this->_enable_xss = (config_item('global_xss_filtering') === TRUE);
is_bool($xss_clean) OR $xss_clean = $this->_enable_xss;
这意味着如果在配置中激活“global_xss_filtering”,即使我在input-> post上关闭xss,它也将应用xss过滤。
这意味着我必须在配置上关闭它并使用
$this->securit->xss_clean($this->input->post())
我的问题如下:
如果没有通过$ this-> input-> post('variable')应用XSS,这是使用它而不是$ _POST的其他优点吗?
在Codeigniter 3中进行XSS过滤的正确方法是什么?
提前致谢。
答案 0 :(得分:2)
在Codeigniter 3中进行XSS过滤的正确方法是什么?
开发社区目前的共识似乎是XSS过滤应该在输出而不是输入时完成。虽然输入和输出过滤器都有很强的论据和支持者。
这是一个庞大且有点复杂的话题。
找到你想知道的更多内容https://www.dwheeler.com/secure-programs/Secure-Programs-HOWTO/cross-site-malicious-content.html
和
https://www.owasp.org/index.php/XSS_(Cross_Site_Scripting)_Prevention_Cheat_Sheet#Introduction
和
https://paragonie.com/blog/2015/06/preventing-xss-vulnerabilities-in-php-everything-you-need-know
在阅读并理解了所有这些内容之后,您可能会发现在输入和输出期间阻止XSS需要大量的思考和工作。
许多人建议不要使用Codeigniter的XSS功能,而是选择类似HTML Purifier的内容。
如果没有通过$ this-> input-> post(' variable')应用XSS,这是使用它而不是$ _POST的其他优点吗?
使用$this->input->post('variable')
的主要优点是它会检查$_POST
中是否存在索引('变量")。要直接使用$_POST
,您确实应该确保该数组具有该索引。
if(isset($_POST['variable'])
{
// do stuff with $_POST['variable']
...
}
如果没有isset
测试,您将面临致命的运行时错误风险。因此,使用$this->input->post('variable')
可以消除持续构建if
阻止
答案 1 :(得分:1)
在我2年前工作的项目http://conferience.com上,我们使用(d)html purifier来阻止xss攻击。此外,当需要明文输入时,我们只使用php的原生strip_tags
方法对任何html字符串进行条带化。
因此我们设置以下设置:
$ global_xss_filtering = FALSE
并在$_POST['something']
/ $this->input->post('something')
输入上使用了手动处理。