2014-01-08 61 views
2

我是CakePHP的新手,正在嘗試做一些類似博客的練習,然後遇到了一些問題。在CakePHP中使用POST將變量從視圖傳遞到控制器

看到一個名爲Post的模型,然後在PostsController下生成了一個view動作來檢查單個博客文章。我想要的是允許用戶能夠在Posts/view頁面上添加對帖子的評論,而不是被重定向到新的Comments/add頁面。要做到這一點,我需要告訴我的CommentsController用戶正在評論哪些帖子。所以寫了這個我/app/View/Posts/view.ctp

<?php 

echo $this->Form->create('Comment', array('controller' => 'comments', 'action' => 'add'); 
echo $this->Form->input('content', array('row' => '3')); 

// this is the line I'm not sure about 
echo $this->Form->input('post_id', array('default' => $post['Post']['id'], 'type' => 'hidden')); 

echo $this->Form->end('Submit'); 

?> 

現在,這個解決方案將在$post['Post']['id']值發送到add行動CommentsController$this->request->data['post_id']形式,但叫我肛門,我擔心這是否是正確的,或「專業」的方式來做到這一點,因爲人們可以通過在任何現代瀏覽器中使用「檢查元素」來改變某些屬性,從而使隱藏的領域變得可見,並不一定存在潛在的安全漏洞,但我個人感覺不舒服。因此,如果有人曾經與CakePHP一起工作過,那麼與我分享一些經驗吧。

回答

3

首先,你可以縮短該行:

$this->Form->hidden('post_id', array('value' => $post['Post']['id'])); 

爲了防止篡改形式使用the security component。它會:

  • 限制您的應用程序接受哪些HTTP方法。
  • CSRF保護。
  • 表格篡改保護
  • 要求使用SSL。
  • 限制交叉控制器通信。

此外我會驗證任何處理的數據是有效的。因此,您可能想要檢查該帖子是否存在並且是公開的,例如以防止人們可以向非公開帖子添加評論。相同的概念適用於一切:永遠不要相信任何輸入,而不是用戶和API。始終驗證數據和情況。

+0

謝謝!所以你所說的基本上是,這是一種正確的方法,我需要的是更多的安全層。我的理解是否正確? – alxyzc

+0

是的。不管你做什麼,你總會不信任傳入的數據,並確保沒有人可以做出惡意的事情。這適用於*每個*程序和編程語言。你介意將答案標記爲正確嗎?謝謝。 ;) – burzum

+0

哦,當然。我只是想知道是否有其他方式可以做到這一點,比如調用控制器的引用者(在本例中是post URL)並解析它以確定該帖子的「id」。但這聽起來很混亂,因爲你有很高的聲譽......哈!只是在開玩笑;) – alxyzc

相關問題