【问题标题】:CodeIgniter input filteringCodeIgniter 输入过滤
【发布时间】:2012-03-12 21:08:42
【问题描述】:

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

$title = $_POST['title'];

为了避免使用 Input 类,但它仍然以某种方式被过滤。有什么方法可以不关闭 global_xss_filtering 吗?

【问题讨论】:

标签: php codeigniter xss


【解决方案1】:

有什么方法可以不用关闭 global_xss_filtering 吗?

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

关于 xss 过滤器的正确使用,我可以咆哮 5 页,但我会尽量保持简洁:

  • 过滤输出,而不是输入
  • 始终牢记上下文并适当转义(这是 HTML?SQL?javascript?文本文件?)
  • 全局过滤器是一个安全毯。一旦您知道自己在做什么,就可以将其移除。

这只是为什么全局 XSS 过滤器是一个坏主意的众多悲惨示例之一:

  • 用户注册了一个帐户,并将他的密码设置为document.write123
  • 您处理密码,并最终对字符串 [removed]123 进行哈希处理
  • 现在,用户可以使用以下任何密码登录,因为在您对它们进行哈希验证之前,这些密码也会被过滤器转换为 [removed]123

    • <script>123
    • document.write123
    • document.cookie123
    • 等等……

不应该发生。用户不应该能够使用多个密码登录(除非它是设计使然......我想)。

另外,祝你好运,保存使用 <iframe>s 的任何博客文章...例如 YouTube 视频。

【讨论】:

  • 你能解释一下为什么我们应该过滤输出而不是输入吗?我真的很想知道为什么,因为到目前为止我总是过滤输入。
  • 因为输出是上下文相关的,而且 PHP 无法确定数据的用途——您必须告诉它如何正确转义。如果您过滤您的输入,您会污染原始数据并且无法恢复它。如果您过滤输出,原始数据将保持不变。假设我希望用户发布代码示例(比如在这个网站上)。使用“哑”全局过滤器会使这成为不可能。它可能产生的另一个副作用是您开始隐式地“信任”所有用户数据,这很糟糕。此外,如果 XSS 过滤器得到改进,您可能希望在输出中利用它。
  • 此外,全局 XSS 过滤器在 所有 获取、发布和 cookie 数据上运行,在 每个 请求上运行,而且速度相当慢,有时 -甚至很傻。例如,删除像<blink>alert() 这样的东西,任何真正的黑客都不会打扰。当然这些事情可能会造成破坏,但这不是 XSS 的重点。
猜你喜欢
  • 2016-08-16
  • 2014-06-15
  • 2014-01-17
  • 2012-02-07
  • 1970-01-01
  • 2011-04-25
  • 2011-08-23
  • 2014-05-25
  • 2011-04-17
相关资源
最近更新 更多