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

Jac*_*ack 4 php security post codeigniter

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

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

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

我最终想把address_line_1数据放到我的数据库中.这是我有点困惑的地方.似乎有几种$_POST从CodeIgniter 中获取数据的方法:

  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当我使用表单验证准备数据时,我应该通过什么方式提取数据?就此而言,表单验证文档含糊不清.例如,没有一个例子表明它实际上将输入数据传递到模型上.

谢谢!

插口

Phi*_*eon 13

它们都是不同的,或者它们不会全部存在.

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

这些都在文档中.

  • 默认情况下,对于要进行XSSified的第二个示例,您必须在配置中打开全局xss过滤,默认情况下不启用.只是不希望有人认为他们不使用XSS保护. (2认同)