mirror of
https://github.com/discourse/discourse.git
synced 2025-05-22 03:51:07 +08:00
SECURITY: Add FinalDestination::FastImage that's SSRF safe
This commit is contained in:

committed by
Blake Erickson

parent
6dcb099547
commit
39c2f63b35
23
lib/final_destination/fast_image.rb
Normal file
23
lib/final_destination/fast_image.rb
Normal file
@ -0,0 +1,23 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class FinalDestination::FastImage < ::FastImage
|
||||
def initialize(url, options = {})
|
||||
uri = URI(normalized_url(url))
|
||||
options.merge!(http_header: { "Host" => uri.hostname })
|
||||
uri.hostname = resolved_ip(uri)
|
||||
|
||||
super(uri.to_s, options)
|
||||
rescue FinalDestination::SSRFDetector::DisallowedIpError, SocketError, Timeout::Error
|
||||
super("")
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def resolved_ip(uri)
|
||||
FinalDestination::SSRFDetector.lookup_and_filter_ips(uri.hostname).first
|
||||
end
|
||||
|
||||
def normalized_url(uri)
|
||||
UrlHelper.normalized_encode(uri)
|
||||
end
|
||||
end
|
Reference in New Issue
Block a user