2013-02-16 24 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