Web 什么';在url中隐藏主键数据库的最佳做法是什么?

Web 什么';在url中隐藏主键数据库的最佳做法是什么?,web,key,hidden,Web,Key,Hidden,实际上,我有这个urlhttp://mydomain.fr/user/1在我的web应用程序中。我认为这不是很安全 我会隐藏自动递增的id 无法做到这一点: http://mydomain.fr/user/1 http://mydomain.fr/user/2 http://mydomain.fr/user/3 http://mydomain.fr/user/4 http://mydomain.fr/user/[...] 我不知道使用哪种技术 散列MD5存储在主键旁边 UUID/GUID

实际上,我有这个url
http://mydomain.fr/user/1
在我的web应用程序中。我认为这不是很安全

我会隐藏自动递增的id

无法做到这一点:

http://mydomain.fr/user/1
http://mydomain.fr/user/2
http://mydomain.fr/user/3
http://mydomain.fr/user/4
http://mydomain.fr/user/[...]
我不知道使用哪种技术

  • 散列MD5存储在主键旁边
  • UUID/GUID

我使用MySQL。

您应该基于身份验证限制对URL的访问。只是“难以猜测”一个ID不会阻止某人访问另一个用户的页面,例如,删除一个意外的用户。基本上,任何人都可以访问任何URL,除非您提供某种访问控制。

我认为为用户生成随机唯一字符串是最好的方法。
只需使用sha1散列就可以了。

OP可能会泄露主键,因为它可能会将信息泄露到某个资源中的多少个资源中

例如,如果他正在构建一个web应用程序,而有人创建了一个帐户,并看到了domain.fr/user/23的url,他们就会知道他们已经在采用率较低的应用程序上创建了一个帐户

我的建议是要么使用上面建议的GUID值,要么使用唯一的用户名

如果使用GUID,它看起来会很难看,但请确保不要只使用开头部分,因为前60位是基于时间戳的,因此可能会大大增加冲突的可能性

如果您使用唯一的用户名,您的url将改为类似于domain.fr/user/username


我知道这在RoR上很容易做到。

没有办法正确隐藏它,你可以用一个长的随机散列字符串生成唯一的ID,这很难隐藏。基本上,这不会阻止某人访问他人的ID。

只是为了了解在什么情况下您觉得不安全?在这种情况下可以使用GUID,但不确定它是否增加了任何好处。1基于Url的路由的目标之一是让用户只通过读取Url就知道他在哪里导航。在url中使用任何哈希或GUID都将使其无法读取