【问题标题】:Using GUID in Querystring for security在查询字符串中使用 GUID 以确保安全
【发布时间】:2016-05-26 10:27:41
【问题描述】:
在我的 ASP.Net MVC 应用程序中,我想允许特定用户组访问他们可以下载文件的页面。通常我会要求这个用户组通过登录名(用户名和密码)访问下载页面并验证他们的登录凭据。但是,该用户组抱怨他们拥有其他几个 Web 系统的登录详细信息的数量,并且真的不想记住另一组登录详细信息。因此,我正在考虑向用户传递一个包含 GUID 的 URL,希望这意味着任何人都不太可能猜到。例如:
http://www.example.com/admin/93017B0C-D548-40CA-A7B0-D4DA707ABE4C
我真的很感激人们对这种方法的看法?它仍然被认为是安全的吗?或者我应该使用我的常规方法来验证用户登录详细信息,然后通过下载将它们重定向到安全页面。
提前致谢。
【问题讨论】:
标签:
asp.net-mvc
security
query-string
guid
【解决方案1】:
有关 GUID 本身安全性的信息,请参阅 this answer 和 GUID RFC。
不要假设 UUID 很难猜;不应该使用它们
作为安全能力(仅仅拥有授权的标识符
访问),例如。一个可预测的随机数源将
加剧局势。
也就是说,GUID 是唯一的,但它们不是不可预测的,因此不适合这种用途。改用 CSPRNG 生成 128 位随机令牌。
关于 URL 的安全性,URL 不被认为是安全的。原因是它们默认由代理和服务器记录,保存在浏览器历史日志中,并且可以被引用的 HTTP 标头泄露。
另外建议使用https,保证路径在传输过程中不会被截取。
假设某个用户已从组中删除,但您使用的是此方案而不是正确的身份验证。他们的浏览器自动完成功能会记住 URL 中的 GUID,这意味着他们将来可以随时访问该页面(或者他们甚至可以将其加入书签以确保这一点)。
我的建议是使用真实身份验证,并鼓励您的用户使用密码管理器。