【问题标题】:What is the 'correct' way to gather $_POST input from my form via CodeIgniter/PHP?通过 CodeIgniter/PHP 从我的表单中收集 $_POST 输入的“正确”方法是什么?
【发布时间】:2011-09-07 14:31:16
【问题描述】:

这更像是一个理论问题,而不是具体问题。

我有一个使用 CodeIgniter 的表单验证类设置的表单。我正在运行一些规则,例如:

$this->form_validation->set_rules('address_line_1', 'Address Line 1', 'required|xss_clean|trim');

我最终想将address_line_1 数据放入我的数据库中。这是我有点困惑的地方。似乎有几种方法可以从 CodeIgniter 中获取 $_POST 数据:

  1. $address = $_POST['address_line_1'];

  2. $address = $this->input->post('address_line_1');

  3. $address = $this->form_validation->set_value('address_line_1');

  4. $address = set_value('address_line_1);

那么哪种方式是“正确”的方式?

虽然我确信其中一些假设是错误的,但我被引导相信......

  • $_POST 未通过 CodeIgniter 的安全性进行消毒(我对此很有信心)

  • $this->input->post() 将清理数据(在一定程度上),但不会应用任何表单验证准备规则

  • $this->form_validation->set_value() 与set_value() 相同,但是...

  • ...set_value() 旨在通过其value="" 元素重新填充表单输入。

我的哪些假设是正确的,哪些是错误的?当我准备使用表单验证时,我应该以什么方式提取 $_POST 数据? 表单验证文档在这方面是模棱两可的。例如,没有一个示例显示它实际上将输入数据传递给模型。

谢谢!

杰克

【问题讨论】:

    标签: php security codeigniter post


    【解决方案1】:

    它们都是不同的,或者它们都不存在。

    1. $_POST['foo'] 是不受保护的原始输出。坏的。不要碰。等等。
    2. $this->input->post('foo') 转义和 XSSified 输入。默认为 FALSE 而不是错误。
    3. $this->form_validation->set_value() 这将采用经过验证的输出,该输出可能已通过验证规则进行了修改。例如,如果您将“trim”添加为验证规则,则会对经过验证的内容进行裁剪。
    4. set_value() 只是上述方法的别名。人们不喜欢在视图中使用 $this。

    这些都在文档中。

    【讨论】:

    • 默认情况下,要使第二个示例进行 XSS 化,您必须在配置中打开全局 xss 过滤,默认情况下未打开。只是不希望有人认为他们没有使用 XSS 保护。
    • 谢谢菲尔。我发现文档有点模棱两可。 $this->form_validation->set_value() 在表单验证文档页面的任何地方都没有提及。
    • 没有,但是 set_value('field name') 是一样的 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-18
    • 2019-09-20
    • 2021-10-30
    • 2017-02-21
    • 2019-02-22
    • 1970-01-01
    相关资源
    最近更新 更多