lib/securenative/utils/request_utils.rb in securenative-0.1.26 vs lib/securenative/utils/request_utils.rb in securenative-0.1.27

- old
+ new

@@ -13,13 +13,23 @@ end [] end def self.get_client_ip_from_request(request, options = nil) - begin - return request.ip unless request.ip.nil? - rescue NoMethodError + unless options.nil? + for header in options.proxy_headers do + begin + h = request.env[header] + return h.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless h.nil? + rescue NoMethodError + begin + h = request[header] + return h.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless h.nil? + rescue NoMethodError + end + end + end end begin x_forwarded_for = request.env['HTTP_X_FORWARDED_FOR'] return x_forwarded_for.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless x_forwarded_for.nil? @@ -30,32 +40,33 @@ rescue NoMethodError end end begin + x_forwarded_for = request.env['HTTP_X_REAL_IP'] + return x_forwarded_for.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless x_forwarded_for.nil? + rescue NoMethodError + begin + x_forwarded_for = request['HTTP_X_REAL_IP'] + return x_forwarded_for.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless x_forwarded_for.nil? + rescue NoMethodError + end + end + + begin x_forwarded_for = request.env['REMOTE_ADDR'] return x_forwarded_for.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless x_forwarded_for.nil? rescue NoMethodError begin x_forwarded_for = request['REMOTE_ADDR'] return x_forwarded_for.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless x_forwarded_for.nil? rescue NoMethodError end end - unless options.nil? - for header in options.proxy_headers do - begin - h = request.env[header] - return h.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless h.nil? - rescue NoMethodError - begin - h = request[header] - return h.scan(/\b(?:[0-9]{1,3}\.){3}[0-9]{1,3}\b/)[0] unless h.nil? - rescue NoMethodError - end - end - end + begin + return request.ip unless request.ip.nil? + rescue NoMethodError end '' end