line:60 mv = ActiveSupport::MessageVerifier.new
return nil unless mv.secure_compare(a, b)
這給錯誤
ArgumentError - wrong number of arguments (0 for 1..2):
activesupport (4.0.3) lib/active_support/message_verifier.rb:29:in `initialize'
app/controllers/application_controller.rb:60:in `new'
http://apidock.com/rails/ActiveSupport/MessageVerifier/secure_compare
編輯
積極支持方法是私人的,所以我只是直接複製的方法到應用控制器。
def secure_compare(a, b)
return false unless a.bytesize == b.bytesize
l = a.unpack "C#{a.bytesize}"
res = 0
b.each_byte { |byte| res |= byte^l.shift }
res == 0
end
這樣做或使用此實現是否存在任何公然的安全問題?
它看起來像唯一需要的論據是祕密。我很困惑,因爲'#secure_compare'本身有兩個參數'(a,b)',我認爲這兩個參數是被比較的兩個祕密。那麼你是否應該將其中的一個傳遞給MessageVerifier.new(key)',然後使用'#secure_compare(self.key,other_key)'? – sixty4bit