addresses #2498: revised implementation
This commit is contained in:
@@ -64,7 +64,7 @@ module Downloads
|
||||
end
|
||||
|
||||
def validate_local_hosts(url)
|
||||
ip_addr = Resolv.getaddress(url.hostname)
|
||||
ip_addr = IPAddr.new(Resolv.getaddress(url.hostname))
|
||||
if Danbooru.config.banned_ip_for_download?(ip_addr)
|
||||
raise Error.new("Banned server for download")
|
||||
end
|
||||
|
||||
@@ -362,7 +362,19 @@ module Danbooru
|
||||
|
||||
# For downloads, if the host matches any of these IPs, block it
|
||||
def banned_ip_for_download?(ip_addr)
|
||||
ip_addr =~ /^(?:127\.0\.0\.1|::1|169\.254\.\d+\.\d+|fe80::.*)$/
|
||||
raise ArgumentError unless ip_addr.is_a?(IPAddr)
|
||||
|
||||
if IPAddr.new("127.0.0.1") == ip_addr
|
||||
true
|
||||
elsif IPAddr.new("169.254.0.0/16").include?(ip_addr)
|
||||
true
|
||||
elsif IPAddr.new("::1") == ip_addr
|
||||
true
|
||||
elsif IPAddr.new("fe80::/10").include?(ip_addr)
|
||||
true
|
||||
else
|
||||
false
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user