关于如何制作Oauth nonce的安全问题

时间:2011-02-26 17:00:23

标签: php security oauth

我可以通过使用除了随机的30个字符的字母数字字符串之外的任何其他内容来确保我的请求更安全吗?

3 个答案:

答案 0 :(得分:2)

实际上,虽然RFC说“随机字符串”,但是随机数不一定是随机的。它必须是独一无二的。

使用随机数的安全性好处是防止重放。服务器只接受已签名的请求,但攻击者可能会尝试捕获已签名的请求,并在以后再次发送。由于服务器仅接受具有特定nonce值的请求一次,因此不起作用。

作为客户端,您的工作是确保永远不会发送具有相同nonce和timestamp的两个请求。通过生成随机字符串,您可以概率地确保这一点。但你也可以使用每秒重置的全局计数器。

服务器的工作是存储从特定客户端收到的所有nonce。出于实际原因,服务器可以在一定时间后过期,但前提是它还拒绝所有具有相应陈旧时间戳的请求。

因此,对于20-30个随机字符,您可以合理地确信在一秒钟内永远不会生成两个相同的随机数。但是,如果你存储并检查你生成的nonces,或者如果服务器拒绝你的nonce,那么6-8个字符就像在RFC示例中一样,就足够了。

答案 1 :(得分:1)

随机数必须是随机的。它的安全性取决于它的不可预测性。没有比随机性更难以预测的了。请注意,您需要使用安全的随机数生成器。伪随机数生成器是不够的。

答案 2 :(得分:0)

使用Nonce,以便源1可以验证来自源2的结果来自它正在与之交谈的原始源。

这最多只需几秒钟即可完成。

nonce没有关于如何构建它们的具体标准,但是你应该始终考虑以下因素:

  • Nonce应该是唯一的,重用同一个nonce会增加黑客猜测nonce的机会
  • nonce应该使用 noise 构建,通过噪声来讨论与第二个相关的服务器信息。

只要您认为nonce不能在短时间内重新生成,那么您应该没问题。