通过CodeIgniter / PHP从我的表单中收集$ _POST输入的“正确”方法是什么?

时间:2011-09-07 14:31:17

标签: php security codeigniter post

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

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

$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);

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

    虽然我确信其中有几个假设是错误的,但我一直认为......

      CodeIgniter的安全性未对
    • $_POST进行了解析(我对此有信心)

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

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

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

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

    谢谢!

    杰克

1 个答案:

答案 0 :(得分:13)

它们都不同,或者它们不会全部存在。

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