我正在构建一个API,其中每个请求查询字符串包含以下内容:
当收到请求时,服务器会检查时间戳并拒绝过旧的请求。服务器还验证签名。
建议将签名保存在数据库中一段时间,以确保在有效时间范围内没有重放攻击吗?这显然与nonce的工作方式非常接近,但我很高兴听到你对这种方法的看法。
答案 0 :(得分:0)
这是一种非常标准的技术。
但是,我会在列表中添加“nonce”字段。原因是如果在同一秒内发出两个合法请求会发生什么?只需存储签名,您就会拒绝有效请求。
但是,如果您让客户端生成128位以上的nonce并将其包含在请求中,那么他们可以根据需要每秒提交尽可能多的请求。
然后,只需维护一个看到的随机数列表以及时间戳。您可以根据时间戳的到期清除该列表。