Chr*_*bek 5 sql api hash timing
我们想要创建一个Web API,用户在购买我们的软件许可证时通过电子邮件接收散列令牌(196位),然后可以使用此令牌激活他们的试用软件版本到"完整"软件.Web API负责接收哈希令牌并确认或拒绝用户升级到完整.
遗漏了大量关于此的细节,似乎以这种方式接收哈希令牌,然后只是检查SQL SELECT,如果此令牌在数据库中,则会暴露定时攻击.攻击者可以通过测量响应时间来尝试从数据库中的令牌中猜测单个字节.
怎么防范这个?一般而言,特别是在Ruby on Rails中.
目前为止的想法:
我的工作解决方案使用第二个索引的token_key字段,该字段是token_hash的前8个字节:
def valid_token(given_token_hash)
# don't look for hash, because of SQL timing attacks
token_key = given_token_hash[0,8]
token = ActivationToken.find_by_token_key(token_key)
# Even if not found in database, we should pretend to take some time
token_hash = token.nil? ? "123e4567-e89b-12d3-a456-426655440000" : token.token_hash
if (!secure_compare(token_hash, given_token_hash))
return nil
end
return token
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
788 次 |
| 最近记录: |