CakePHP 1.26:“安全”组件中的错误?

时间:2010-04-11 03:33:12

标签: security cakephp components cakephp-1.2

对于那些之前可能已经阅读过的人,我做了一些研究并彻底改变了我的问题。我一直遇到一个问题,我的表单请求被安全组件搞黑了,尽管在禁用安全组件时一切正常。我已将其追溯到一行中的一行:

<?php echo $form->create('Audition');?>
    <fieldset>
        <legend><?php __('Edit Audition');?></legend>
    <?php
        echo $form->input('ensemble');
        echo $form->input('position');
        echo $form->input('aud_date');
        // The following line works fine...
       echo $form->input('owner');  
       // ...but the following line blackholes when Security included
        // and the form is submitted:
        // echo $form->input('owner', array('disabled'=>'disabled');
    ?>
    </fieldset>
<?php echo $form->end('Submit');?>

(为了清楚起见,我已经注释了违规行)我认为我正在遵循规则,使用表单助手;据我所知,这是安全组件中的一个错误,但我太确定了CakePHP n00b。我想得到一些反馈,如果这是一个真正的错误,我会将它提交给CakePHP团队。我也很想知道我是不是在愚蠢而且在这里遗漏了一些明显的东西。

(很抱歉在这里发表评论,但我在评论中没有足够的空间)

更新:谢谢Jesh,你是100%正确的 - “禁用时不会提交输入值”。我甚至在the official HTML spec上查了一下,在那里它说:“[禁用元素]无法接收用户输入,也不会以”“的形式提交其值。但Cake IS 使用表单提交值!当我禁用安全组件时,我可以查看与表单一起提交的POST数据,果然,“所有者”字段已经提交!不幸的是,这正是我想要的行为,但它似乎与官方HTML规范不一致......所以我认为这是标准表单助手的错误。我会向CakePHP团队报告这个错误,但我很乐意听到任何可以证实或反驳这一点的人。

另外,Jesh,你使用安全密钥并将其设置为false的想法很有效,但我真的不想让这个字段不安全(事实上,我特别不想让这个字段不安全)在我看来,我不应该这样做。事实上,现在我认为这也可能是安全组件中的一个错误;我使用 FormHelper在这里创建我的表单 - 所以安全组件不应该能够处理这个吗?

@Miles:您的解决方案也很有效 - 谢谢!但它仍然留下我上面提出的相同问题。

3 个答案:

答案 0 :(得分:1)

嗯,禁用时不会提交输入值。但是,由于您使用Cakephp的FormHelper输出字段,因此SecurityComponent期望输入值必须列在Controller->data数组中,否则它会使您的请求黑屏。

尝试在表单选项数组中添加secure键,并将其设置为false

答案 1 :(得分:1)

将此添加到您的beforeFilter()中:

$ this-&gt; Security-&gt; disabledFields = array('owner');

答案 2 :(得分:0)

您可以在表单中使用readonly代替disabled。这对我行得通。 Disabled故意是黑洞。