2012-12-30 45 views
5

我喜歡爲他的用戶創建一個安全的URL(刪除和編輯鏈接)。如何在CakePHP中生成安全的私人網址?

爲前,這是我的實際URL

http://localhost/project/blogs/delete/1/test-title 

我想要做的是,

http://localhost/project/blogs/delete/4324143563443/test-title (some hash made of salt+user auth id) 

我的主要目的是與URL進行刪除和編輯一起創造一個安全散列方法。 是否有任何自定義方法可用? 我搜索在CakePHP的安全功能http://book.cakephp.org/2.0/en/core-utility-libraries/security.html並不能確定其正確的方式是否做到這一點還是不知道哪個algorith使用)

+0

你爲什麼這樣做?因此,用戶無法看到他們即將刪除的帖子的ID?一般來說,你不能取消哈希散列。 –

+0

僅限於我的刪除和編輯鏈接。所以任何用戶都不能刪除或編輯我的帖子。當然,我可以做我的控制器本身檢查,但是,我想使URL看起來很安全。 –

+0

我不能說我可以在隧道盡頭看到這種技術。你可以傳遞一個名爲'http:// localhost/project/blogs/delete/1/hash:4324143563443'的命名參數,但它不會有很大的作用。我個人會創建一個角色表併爲用戶分配角色。 –

回答

8

首先,雖然我不是很清楚如何/你爲什麼要做到這一點,聽起來像你想通過模糊他們的URL來「保護」這些鏈接。這就是所謂的「Security through Obscurity」,並且一般都會皺起眉頭。

在Cake(以及大多數應用程序)中,通常的方式是允許用戶登錄(請參閱:Auth Component),然後在例如刪除操作(即URL/delete/1)請求將被檢查有效的用戶會話,並且該用戶具有足夠的權限進行刪除。

雖然我會強烈推薦,否則,如果您確實希望創建這些晦澀的URL,那麼您應該使用Security::hash();。這個問題是你不能只散列id,然後直接從散列中確定id(這就是整個問題!)。相反,您需要將散列存儲在數據庫中,然後查詢散列(每個帖子可以具有由ID生成的唯一散列或者只是隨機數據生成的唯一散列)。

2

正如已經提到的「默默無聞的安全」不是很聰明。儘管如此,實現你想要的最簡單的方法是使用UUID作爲表的主鍵而不是數字自動增量。

+0

可能值得注意的是,儘管使用UUID意味着主鍵序列是不可預知的,但「受保護」URL仍然可以從「公共」URL中預測到,我相當確定OP是想要避免的。我認爲將不可預知的事情綁定到每個id最簡單的方法是將數據(hash等)存儲在數據庫中。 –

+0

對。反正他的做法是蹩腳的第一位,所以無論你生成的網址它不會是真正安全:) – ADmad

+0

非常真實......... :) –