2013-03-12 205 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不是不安全,它将取决于您的软件的规则。