1

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

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

在 URL 中,我得到如下内容:

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

这似乎一点也不安全。关于如何隐藏它或做什么的任何提示。

4

3 回答 3

0

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

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

User这应该从此刻登录的人那里加载实体。[...]->getUser()->getId()应该给你$id

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

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

于 2013-03-12T12:49:21.037 回答
0

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

在某种User情况下,通常,您可以设置emailorusername属性Unique,然后只在您的网址中提供它们。这样,不可能通过在 url 中增加一些 id 来“耕种”您的用户数据库。

这种行为不仅更安全,而且更漂亮和友好,而不是在你的网址中包含模糊的数字。

最好的

于 2013-03-12T08:34:30.330 回答
0

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

于 2013-03-12T12:35:00.027 回答