CodeIgniter输入过滤

use*_*320 2 php xss codeigniter

我正在写一本书籍列表网站,并遇到了codeigniter的xss过滤问题.提交表单以创建列表时,包含"Javascript:"的任何标题都将替换为"[REMOVED]".我试过从POST数组访问数据,如下所示:

$title = $_POST['title'];
Run Code Online (Sandbox Code Playgroud)

避免使用Input类,但它仍然以某种方式被过滤.有没有办法解决这个问题,而不涉及关闭global_xss_filtering?

Wes*_*rch 9

有没有办法解决这个问题,而不涉及关闭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过滤器得到改进,您需要在输出上利用它. (3认同)