Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 编码点火器输入滤波_Php_Codeigniter_Xss - Fatal编程技术网

Php 编码点火器输入滤波

Php 编码点火器输入滤波,php,codeigniter,xss,Php,Codeigniter,Xss,我在一个图书上市网站工作,遇到了codeigniter的xss过滤问题。提交表单以创建列表时,包含“Javascript:”的任何标题都将替换为“[REMOVED]”。我尝试过从POST数组访问数据,如下所示: $title = $_POST['title']; 为了避免使用输入类,但它仍然以某种方式被过滤。有没有办法不关闭全局搜索过滤 有没有办法不关闭全局搜索过滤 不,对不起。您必须关闭它,因为它会在CI执行的早期更改原始post数据 我可以滔滔不绝地说5页关于xss过滤器的正确使用,但我会

我在一个图书上市网站工作,遇到了codeigniter的xss过滤问题。提交表单以创建列表时,包含“Javascript:”的任何标题都将替换为“[REMOVED]”。我尝试过从POST数组访问数据,如下所示:

$title = $_POST['title'];
为了避免使用输入类,但它仍然以某种方式被过滤。有没有办法不关闭全局搜索过滤

有没有办法不关闭全局搜索过滤

不,对不起。您必须关闭它,因为它会在CI执行的早期更改原始post数据

我可以滔滔不绝地说5页关于xss过滤器的正确使用,但我会尽量保持简洁:

  • 过滤输出,而不是输入
  • 始终牢记上下文并适当转义(这是HTML?SQL?javascript?文本文件?)
  • 全局过滤器是一个安全毯。一旦你知道你在做什么,你就可以移除它
以下只是众多悲剧性示例中的一个,说明了为什么全局XSS过滤器是个坏主意:

  • 用户注册帐户,并将其密码设置为
    document.write123
  • 处理密码,最后对字符串进行哈希运算
    [removed]123
  • 现在,用户可以使用以下任意密码登录,因为在对密码进行哈希验证之前,这些密码也会被过滤器转换为
    [removed]123

    • 123
    • document.write123
    • document.cookie123
    • 等等
那不应该发生。一个用户应该不能使用多个密码登录(除非是出于设计……我想)


另外,祝你好运,保存任何使用
s的博客帖子。。。例如YouTube视频。

这个答案可能会帮助你:你能解释一下为什么我们应该过滤输出而不是输入吗?我真的很想知道为什么,因为到目前为止,我一直在过滤输入。因为输出是上下文敏感的,PHP无法找出数据的用途-你必须告诉它如何正确地转义。如果过滤输入,会污染原始数据,无法恢复。如果过滤输出,原始数据将保持不变。假设我希望用户发布代码示例(如在本网站上)。使用“哑”全局过滤器将使这变得不可能。它可能产生的另一个副作用是,您开始隐式地“信任”所有用户数据,这是不好的。此外,如果XSS筛选器得到改进,您可能希望在输出上利用它。此外,全局XSS筛选器在每个请求上都对所有get、post和cookie数据运行,而且速度相当慢,有时甚至很愚蠢。例如,删除像
alert()
这样的东西,这是任何真正的黑客都不会介意的。当然,这些事情可能会造成破坏,但这不是XSS的重点。