在 Querystring 中使用 GUID 以确保安全
Using GUID in Querystring for security
在我的 ASP.Net MVC 应用程序中,我想允许特定用户组访问他们可以下载文件的页面。通常我会要求该用户组通过登录名(用户名和密码)访问下载页面并验证他们的登录凭据。然而,这个用户组抱怨他们拥有的其他几个 web 系统的登录详细信息的数量,并且真的不想记住另一组登录详细信息。因此,我正在考虑向用户传递一个包含 GUID 的 URL,希望这意味着任何人都不太可能猜到。例如:
http://www.example.com/admin/93017B0C-D548-40CA-A7B0-D4DA707ABE4C
我真的很想知道人们对这种方法的看法?它还会被认为是安全的吗?或者我应该使用我的常规方法验证用户登录详细信息,然后将它们重定向到下载的安全页面。
提前致谢。
有关 GUID 本身安全性的信息,请参阅 this answer and the GUID RFC。
Do not assume that UUIDs are hard to guess; they should not be used
as security capabilities (identifiers whose mere possession grants
access), for example. A predictable random number source will
exacerbate the situation.
也就是说,GUID 是唯一的,但它们不是不可预测的,因此不适合这种用途。改为使用 CSPRNG 生成 128 位随机令牌。
关于 URL 的安全性,URL 不被认为是安全的。原因是它们默认由代理和服务器记录,保存在浏览器历史日志中,并且可以通过引用 HTTP header.
泄露
另外推荐使用https,保证路径在传输过程中不会被拦截
假设用户已从组中删除,但您使用的是此方案而不是正确的身份验证。他们的浏览器 auto-complete 会记住 URL 中的 GUID,这意味着他们以后可以随时访问该页面(或者他们甚至可以将其加入书签以确保这一点)。
我的建议是使用真实身份验证,并鼓励您的用户使用密码管理器。
在我的 ASP.Net MVC 应用程序中,我想允许特定用户组访问他们可以下载文件的页面。通常我会要求该用户组通过登录名(用户名和密码)访问下载页面并验证他们的登录凭据。然而,这个用户组抱怨他们拥有的其他几个 web 系统的登录详细信息的数量,并且真的不想记住另一组登录详细信息。因此,我正在考虑向用户传递一个包含 GUID 的 URL,希望这意味着任何人都不太可能猜到。例如:
http://www.example.com/admin/93017B0C-D548-40CA-A7B0-D4DA707ABE4C
我真的很想知道人们对这种方法的看法?它还会被认为是安全的吗?或者我应该使用我的常规方法验证用户登录详细信息,然后将它们重定向到下载的安全页面。
提前致谢。
有关 GUID 本身安全性的信息,请参阅 this answer and the GUID RFC。
Do not assume that UUIDs are hard to guess; they should not be used
as security capabilities (identifiers whose mere possession grants
access), for example. A predictable random number source will
exacerbate the situation.
也就是说,GUID 是唯一的,但它们不是不可预测的,因此不适合这种用途。改为使用 CSPRNG 生成 128 位随机令牌。
关于 URL 的安全性,URL 不被认为是安全的。原因是它们默认由代理和服务器记录,保存在浏览器历史日志中,并且可以通过引用 HTTP header.
泄露另外推荐使用https,保证路径在传输过程中不会被拦截
假设用户已从组中删除,但您使用的是此方案而不是正确的身份验证。他们的浏览器 auto-complete 会记住 URL 中的 GUID,这意味着他们以后可以随时访问该页面(或者他们甚至可以将其加入书签以确保这一点)。
我的建议是使用真实身份验证,并鼓励您的用户使用密码管理器。