2013-02-16 26 views
1

我不知道如何通过Cake的形式安全地传递参数。 我现在使用的方法如下:蛋糕PHP传递参数与控制器的形式

$this->Form->create('Post', array('label' => '', 'action' => '', 'url' => 'inseratAngenommen/'.$postId)); 

在控制器立有:

function inseratAngenommen($id = null, $bs = null){ 
    //stuff 
} 

的poblem是用户可以修改浏览器$帖子ID的输出数:

action="/cakephp/posts/inseratAngenommen/149" 

对于这种情况,我想传递HTML中不可见的参数。那可能吗? 我想到了像Form-> PostLink提供的方法。我找不到任何东西。 在此先感谢。

+0

使用安全组件,这种方式不能形成回火 – mark 2013-02-16 17:52:26

+0

这听起来像是真正的路要走,谢谢:) – Karl 2013-02-16 18:14:32

+0

我不确定安全组件是否会保护改变窗体输入的*值*。 Afaik它只能保护添加/删除输入。所以如果你打算使用它,请仔细检查它是否符合你的要求。它*可以*验证表单行为,我将不得不考虑这一点。 – thaJeztah 2013-02-17 10:41:14

回答

0

它是不是由于数据是由用户发送的,因此可以在网站上安全地发送参数。

使用cakephp的验证方法来确保数据是正确的。

+0

感谢分享。验证规则通常被触发,但当用户用例如来自例如萤火虫验证数组的“149”至“148”不能将其与正常输入区分开来并将其传递给控制器​​。我会尝试ptica的方法2,因为这听起来很安全...... – Karl 2013-02-16 18:07:52

0

1]方法一:通过隐藏的$ id到发布现场:添加默默无闻

$this->Form->hidden('id'); 
$this->Form-field('id'); // even this one will do as cake hides ids by default 

2]方法二:保持服务器实例上的ID在会话

$this->Session->write('current-edited-post-id', $id); // upon form display 
$id = $this->Session->read('current-edited-post-id'); // upon form submission 

但是要注意,如果用户打开多个选项卡并且从它们两个都运行一个会话,那么方法2表现不佳:(

+0

感谢您分享这些知识。首先,我用隐藏的表单字段尝试了它,但它们像url-param-thing一样显示。方法2听起来更安全,但我遇到了一个奇怪的问题,会话变化非常缓慢。修好后我会试试。谢谢 – Karl 2013-02-16 18:10:44

+1

不要使用任何这样的会话内容 - 只要您使用多个选项卡(基本上每个人都会这样做),它就会以用户身份困扰您。 – mark 2013-02-16 18:21:09

+0

Karl,您是否已经移除了您在表单创建中获得的$ postId? 即。 '$ this-> Form-> create('Post');' – ptica 2013-02-16 20:19:40