提交 77ed79b8 编写于 作者: S Santiago Pastorino

Merge pull request #17604 from rymohr/message-verifier-case-sensitivity

Abstract encoding strategy for ActiveSupport::MessageVerifier
...@@ -40,7 +40,7 @@ def verify(signed_message) ...@@ -40,7 +40,7 @@ def verify(signed_message)
data, digest = signed_message.split("--") data, digest = signed_message.split("--")
if data.present? && digest.present? && ActiveSupport::SecurityUtils.secure_compare(digest, generate_digest(data)) if data.present? && digest.present? && ActiveSupport::SecurityUtils.secure_compare(digest, generate_digest(data))
begin begin
@serializer.load(::Base64.strict_decode64(data)) @serializer.load(decode(data))
rescue ArgumentError => argument_error rescue ArgumentError => argument_error
raise InvalidSignature if argument_error.message =~ %r{invalid base64} raise InvalidSignature if argument_error.message =~ %r{invalid base64}
raise raise
...@@ -51,11 +51,19 @@ def verify(signed_message) ...@@ -51,11 +51,19 @@ def verify(signed_message)
end end
def generate(value) def generate(value)
data = ::Base64.strict_encode64(@serializer.dump(value)) data = encode(@serializer.dump(value))
"#{data}--#{generate_digest(data)}" "#{data}--#{generate_digest(data)}"
end end
private private
def encode(data)
::Base64.strict_encode64(data)
end
def decode(data)
::Base64.strict_decode64(data)
end
def generate_digest(data) def generate_digest(data)
require 'openssl' unless defined?(OpenSSL) require 'openssl' unless defined?(OpenSSL)
OpenSSL::HMAC.hexdigest(OpenSSL::Digest.const_get(@digest).new, @secret, data) OpenSSL::HMAC.hexdigest(OpenSSL::Digest.const_get(@digest).new, @secret, data)
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册