我不是要求一般的" guid vs ints哪个更好"题。我知道,或者至少认为我知道他们都有特定的场景,其中一个比另一个好。但我确实有一个特定的场景,我正在编写一个聊天应用程序。我启动了应用程序,所有主键都是int。但经过一些研究后,我意识到我可能在应用程序中存在安全漏洞,因为我将主键传递给用户的浏览器,用于不同的实体请求,如聊天室,谈话者等。人们会同意可以猜到后续的主键,因此用户可以改变其他用户的会话和状态。为了防止这种情况,我正在考虑使用guid作为我的主键但是另一个想法打击了我。关于表现的想法。由于这是一个聊天应用程序,如果应用程序负载很重,使用guid确实会让我失去性能,比如10s或100s的数千个用户。我真的没有足够的信息在这里做出选择。我的问题很简单,我是否需要将主键更改为guid以帮助猜测主键更难,或者是否有其他方法可以保证我的应用程序而不需要使用guid。如果问题不够明确,请告诉我,我会澄清,谢谢。
答案 0 :(得分:4)
不,您不需要将主键更改为GUID。这不一定会给你任何额外的安全性,可以说是security by obscurity。
使用GUID使攻击者猜测其他用户的ID或聊天室的唯一密钥是不可行的。但是,它不会阻止他们查看ID,如果他们已经传输,然后能够执行您当前担心的任何操作。
相反,当用户对数据库发出请求时,您必须验证是否允许他们访问该数据。例如,他们应该只能检索自己的用户信息,或者有关其他用户的基本用户信息(例如句柄,而不是电子邮件地址)。