【问题标题】:How Does CodeIgniter's Form Validation Library Handle XSS Filtering?CodeIgniter 的表单验证库如何处理 XSS 过滤?
【发布时间】:2009-08-11 06:26:17
【问题描述】:

CodeIgniter 表单验证库提供了从正在验证的表单中“准备”数据的选项。以下是文档中的一个 sn-p:

$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean');

最后的xss_clean 参数应该是通过xss_clean 函数传递帖子数据。

我想知道如何使用$_POST 数据usernamexss_clean 函数是否直接作用于$_POST 变量,以便我可以这样做:$username = $this->input->post('username');,并实际获得过滤后的数据?如果我将最后一条语句放在验证行之前怎么办?在这种情况下,$username 会包含未过滤的数据吗?提前致谢!

【问题讨论】:

    标签: php validation codeigniter


    【解决方案1】:

    验证确实 xss clean,但它与 $this->input->post('username') 无关。那里的那条线将自动清除 xss,完全独立于您的验证内容(假设您启用了全局 xss 过滤)。事实上,我愿意打赌两者都做实际上会 xss 清理它两次,因为我很确定验证只会创建数组的副本..它不会实际修改 $_POST。

    但正如我所说,如果您通过$this->input->post('username') 访问它,无论如何它都会被清除。

    【讨论】:

    • 你提到了$this->input->post('username') will xss clean automatically。如果您将 TRUE 作为第二个参数传递,它不只是 xss 清理它吗?用户指南说XSS filter is enabled by setting the second parameter to TRUE (codeigniter.com/user_guide/libraries/input.html)
    【解决方案2】:

    来自user guide

    “如果遇到任何不允许的情况,通过将数据转换为字符实体来使其安全”

    所以是的,在使用 xss 选项集通过表单验证运行 $this->input->post('username') 后,任何脏数据都会干净。

    是的,如果您将该语句放在验证行之前,它将不会被清除。

    请注意,您可以在所有表​​单提交的数据上全局运行 xss,这样您就不需要将其包含在您的验证规则中。

    【讨论】:

    • 所以是的,在运行 $this->input->post('username') 通过表单验证并设置 xss 选项后,任何脏数据都将干净。您必须将第二个参数设置为 TRUE
    【解决方案3】:

    我强烈建议您查看 system/libraries/Input.php 您可以确切地看到其中的工作是如何完成的。

    我总是建议打开全局 xss_clean。对性能的影响很小,除非您故意在某些字段上检查 xss。

    【讨论】:

      猜你喜欢
      • 2016-01-25
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-24
      相关资源
      最近更新 更多