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