cakePHP - 防止表单选择列表篡改

时间:2012-06-12 01:08:31

标签: php forms security cakephp cakephp-2.0

我有一个带有几个选择输入的简单表单。其中一个是性别选择。

输入的生成如下:

echo $this->Form->input('gender_id', array(
    'options' => array(
        1 => 'Male',
        2 => 'Female'
    )
));

如何确保只提交给定的选项,以便无法提交3或者其他内容?

我正在使用安全组件,它似乎可以防止字段名称被篡改,但不会篡改价值。

对于像State select这样的较大选择列表,进行简单的比较是不切实际的。此外,我正在努力避免进行额外的查询来验证ID。

2 个答案:

答案 0 :(得分:1)

要求值在模型验证的指定列表中:

public $validate = array(
    'gender_id' => array(
      'allowed' => array(
      'rule'    => array('inList', array(1, 2)),
      'message' => 'Please select male or female.'
     )
   )
 );

答案 1 :(得分:0)

在数据库中将此字段设为ENUM字段,允许值为1和2.

您可以阻止某人提交第三个值,只需使用FireBug操纵DOM或POST请求即可。如果它不是DB值并且不通过Model表单验证规则运行,则必须在控制器中手动执行。因为只有根据您的描述需要这种验证。