如何隐藏URL中的ID?

时间:2013-03-12 07:37:00

标签: symfony routing

我正在使用URL中某些实体的id来指定对特定元素的处理。路由文件在某种程度上是这样的:

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

在网址中我得到这样的内容:

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

这根本不安全。关于如何隐藏它或做什么的任何提示。

3 个答案:

答案 0 :(得分:0)

如果您不想在页面或网址中向您的用户显示您的实体ID,则必须为每个实体定义一个唯一属性,该属性可以是“公共”。

User案例中,您通常可以设置emailusername属性Unique,然后只在您的网址中提供这些属性。这样,就不可能通过在URL中增加一些id来“耕种”用户数据库。

这种行为不仅更安全,而且更漂亮,更友好,而且在您的网址中隐藏了数字。

最佳

答案 1 :(得分:0)

正如@ihsan之前所回答的那样,在您的网址中使用ID并不是一个安全问题。作为ID的替代方案,您可以使用Doctrine Sluggable Extension。 请记住,如果仅引用一个对象,则参数仍应是唯一的。 Sluggable还提供了一些SEO优势。

答案 2 :(得分:0)

在这种情况下,如果您只希望用户能够更新自己,您应该只省略URL中的$id并从security.context中读取控制器。

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

这应该从当前登录的任何人加载User实体。 [...]->getUser()->getId()应该为您提供$id

如果您不希望这只适用于UpdateUsuarioAction,想要更通用的东西,则应使用POST而不是GET,或者可以完全省略该变量并将其存储在会话中。请注意,使用POST并不是更安全,因为用户可以修改POST数据。它只需要更多的工作。

通常,传递ID并不安全,这取决于您的软件规则。