除了使用随机 30 个字符的字母数字字符串作为随机数之外,我真的可以通过使用其他任何东西来使我的请求更安全吗?
最佳答案
实际上,虽然 RFC 说“随机字符串”,但随机数不一定是随机的。它必须是独一无二的。
使用随机数的安全优势在于防止重播。服务器仅接受签名的请求,但攻击者可能会 try catch 已签名的请求并稍后再次发送。由于服务器仅接受一次具有特定随机数值的请求,因此这是行不通的。
作为客户端,您的工作是确保您永远不会发送具有相同随机数和时间戳的两个请求。通过生成随机字符串,您可以从概率上确保这一点。但您也可以使用每秒重置的全局计数器。
服务器的工作是存储从特定客户端接收到的所有随机数。出于实际原因,服务器可以在一定时间后使随机数过期,但前提是它也拒绝具有相应过时时间戳的所有请求。
因此,使用 20-30 个随机字符,您可以有理由相信,您永远不会在一秒钟内生成两个相同的随机数。但是,如果您存储并检查生成的随机数,或者在服务器拒绝您的随机数时愿意重试,则 6-8 个字符(如 RFC 示例中所示)就足够了。
关于php - 有关如何生成 Oauth 随机数的安全问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5128352/