2013-03-12 204 views
1

我正在使用URL中的一些實體的ID來指定對特定元素的處理。路由文件是有點這樣的:如何隱藏網址中的ID?

UpdateUser: 
    pattern: /UpdateUser/{id} 
    defaults: { _controller: AfricaClientBundle:Secteur:UpdateUser } 

在URL我得到這樣的:

http://127.0.0.1/Symfony/web/app_dev.php/UpdateUser/215 

這好像不安全,根本不會。任何暗示如何隱藏它或做什麼。

+3

在我看來,只要您避開輸入內容,只需在您的網址中輸入id即可。 – Sethunath 2013-03-12 08:04:41

+1

它是安全的。 symfony中有一個安全組件可以處理這個問題。詳細瞭解它是如何工作的http://symfony.com/doc/current/components/security/index.html – ihsan 2013-03-12 10:35:09

回答

0

如果您不想向您的用戶顯示您的實體ID,無論是在網頁還是網址中,您都必須爲每個實體定義一個可能爲「公開」的獨特屬性。

User情況下,通常情況下,你可以設置emailusername財產Unique,然後只給他們在你的網址。這樣,通過在url中增加一些id來「放置」你的用戶數據庫是不可能的。

這種行爲不僅更安全,而且更漂亮,更友好,而且在您的網址中隱藏着數字。

最佳

0

正如@ihsan在網址中使用的ID之前回答,是不是一個安全問題本身。作爲ID的替代品,您可以使用Doctrine Sluggable Extension。 請記住,如果僅引用一個對象,則參數仍然應該是唯一的。 S also還提供了一些搜索引擎優化的優勢。

0

在這種情況下,如果您只希望自己的用戶能夠更新自己,則只需在您的URL中省略$id並從security.context中將其讀取到您的控制器中。

$user = $this->get('security.context')->getToken()->getUser(); 

這應該加載User實體從當前登錄的任何人。 [...]->getUser()->getId()應該爲你帶來$id

如果你不希望這隻適用於UpdateUsuarioAction,想要更通用的東西,你應該使用POST而不是GET或者可能完全省略變量並將其存儲在會話中。請注意,使用POST並不太安全,因爲用戶可以修改POST數據。它只需要一點點的工作。

通常,傳遞一個ID不是不安全,它將取決於您的軟件的規則。