Rails项目防止时序攻击

  时序攻击属于侧信道攻击/旁路攻击(Side Channel Attack),侧信道攻击是指利用信道外的信息,好比加解密的速度/加解密时芯片引脚的电压/密文传输的流量和途径等进行攻击的方式,一个词形容就是“旁敲侧击”。数据库

  举一个最简单的计时攻击的例子,某个函数负责比较用户输入的密码和存放在系统内密码是否相同,若是该函数是从第一位开始比较,发现不一样就当即返回,那么经过计算返回的速度就知道了大概是哪一位开始不一样的,这样就实现了电影中常常出现的按位破解密码的场景。密码破解复杂度成千上万倍甚至百万千万倍的降低。ide

  在验证密码,验证token时会比较容易被时序攻击。例如rails验证用户的token时,用户请求的参数token,和数据库用户的token user.token做对比,若是匹配则认证成功。函数

  为了防止时序攻击,rails项目能够用 ActiveSupport::SecurityUtils.secure_compare 方法去比较两个值是否匹配。spa

  

if ActiveSupport::SecurityUtils.secure_compare(user.token, token)
  true
else
  false
end
相关文章
相关标签/搜索