我正在使用ASP.NET和我的网站的成员资格提供程序。如果用户能够轻松查看其GUID,那么这会被视为安全风险吗?我是否应该采取额外措施来阻止用户轻松找到他们的GUID,例如在他们确认验证过程时。虽然有很多方法可以解决这个问题,例如为“前端”活动使用单独的GUID,这是否会增加开销和开发时间?
可能欺骗的一个例子是我正在验证用户访问资源的权限。
Guid cUser = (Guid)Membership.GetUser().ProviderUserKey; //if this is publicly viewed, then there's no reason to call the DB or store in a session as it can be placed in the QueryString
bool grantAccess = CheckGroupPermission(cUser, groupID);
由于
答案 0 :(得分:5)
不,显示用户记录的ID本身并不存在安全风险。无论如何,你不应该依赖它是秘密的,因为很难让自己完全独立于它们。
如果您仅使用id作为验证来授予对资源的访问权限,则存在安全风险。您永远不能完全依赖客户端发送的任何信息,您应该始终使用一些不容易被篡改的信息,例如只有在经过适当的用户验证后放置在那里的会话变量中的值。
答案 1 :(得分:4)
将数据库的密钥暴露给外部世界通常不是一个好主意,但如果必须选择要公开的字段类型,那么GUID就不是一个选择。它比暴露序列号要好得多,因为它可以猜测(相当容易)在DB中构成未知有效标识符的内容。
您可以提供用户名,而不是向外界提供GUID。它应该是独一无二的。