我正在使用安全令牌来创建这样的不可猜测的 URL(16 个字节,十六进制)
http://example.com/something/private/b5f8c21a628e12b39786fb8ef9561d31
令牌类似于共享密码:谁知道 URL 被允许访问资源。
安全随机值应该有多少字节适合安全 URL?
我正在使用安全令牌来创建这样的不可猜测的 URL(16 个字节,十六进制)
http://example.com/something/private/b5f8c21a628e12b39786fb8ef9561d31
令牌类似于共享密码:谁知道 URL 被允许访问资源。
安全随机值应该有多少字节适合安全 URL?
我最终得到了一个 64 位随机值,它被编码为 url-safe Base64。猜测正确标记的可能性1 / 2^64
等于1 / 18446744073709551616
。这是一个令人印象深刻的数字,攻击者几乎不可能通过 http 请求找到正确的令牌。
URL 现在看起来像这样:http://example.com/private/1oWYPiqO81k/
好吧,所有应用程序在某些时候都依赖于加密随机数。毕竟这是一个会话 id 或 csrf 令牌值。这里的重要性在于,如果攻击者有 100 年的时间来破解它,那么该值有多长并不重要。现在 100 年是一段很长的时间,但你应该努力让你的设计能持续这么久。
cookie 和您的值之间安全性的主要区别在于 cookie 会过期并且每次使用都会更改。但实际上,应该不惜一切代价避免这个值。如果这用于身份验证,则依赖会话 ID,这就是它存在的原因。不要滚动你自己的会话。
例如 10 个 unicode 字符的 URL,实际上是不可能猜到的,因为令牌有 160 位长,因此有 2 ^ 160 个不同的可能 URL。但是,您不应该依赖类似的东西来保证安全性,而应该依赖经典的登录和身份验证