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
相關文章
相關標籤/搜索