Ruby on Rails 5.2 - ActionDispatch::RemoteIp

वर्ग ActionDispatch :: RemoteIp




ruby

वर्ग ActionDispatch :: RemoteIp

जनक:
Object

यह मिडलवेयर दूरस्थ क्लाइंट के आईपी पते की गणना करता है जो अनुरोध कर रहा है। यह विभिन्न हेडर की जांच करके करता है जिसमें पता शामिल हो सकता है, और फिर अंतिम सेट पता उठा सकता है जो विश्वसनीय आईपी की सूची में नहीं है। यह उदाहरण के लिए Tomcat सर्वर द्वारा पूर्ववर्ती सेट का अनुसरण करता है, जिसमें तर्क के अनुसार @gingerlime द्वारा लंबाई बताई गई है। एल्गोरिथ्म का एक अधिक विस्तृत विवरण ActionDispatch::RemoteIp::GetIp#calculate_ip पर दिया गया है।

कुछ Rack सर्वर बार-बार हेडर को बदलते हैं, जैसे HTTP RFC 2616 की आवश्यकता होती है। कुछ रैक सर्वर बस पूर्ववर्ती हेडर को छोड़ देते हैं, और केवल पिछले हेडर में दिए गए मान की रिपोर्ट करते हैं। यदि आप कई प्रॉक्सी सर्वर (जैसे NGINX से HAProxy to Unicorn) के पीछे हैं, तो आपको यह सुनिश्चित करने के लिए अपने Rack सर्वर का परीक्षण करना चाहिए कि आपका डेटा अच्छा है।

यदि आप एक प्रक्रिया का उपयोग नहीं करते हैं, तो यह आपको आईपी SPOOFING के लिए अनुकूल बनाता है। यह मिडिलवेयर मानता है कि क्लाइंट के दूरस्थ आईपी पते के साथ हेडर को स्थापित करने और स्थापित करने के लिए कम से कम एक प्रॉक्सी है। यदि आप प्रॉक्सी का उपयोग नहीं करते हैं, क्योंकि आप SSL बिना उदाहरण के हेरोकू पर होस्ट किए गए SSL , तो कोई भी ग्राहक एक्स-फॉरवर्ड-फॉर हेडर सेट करके किसी भी आईपी पते का दावा कर सकता है। यदि आप इस बारे में परवाह करते हैं, तो आपको इस मिडलवेयर के चलने से कुछ समय पहले उन हेडर को स्पष्ट रूप से छोड़ने या अनदेखा करने की आवश्यकता है।

स्थिरांक

TRUSTED_PROXIES

डिफ़ॉल्ट विश्वसनीय IP सूची में IP पते शामिल हैं जो कि IP विनिर्देश द्वारा निजी पते होने की गारंटी है। वे उत्पादन में अंतिम ग्राहक आईपी नहीं होंगे, और इसलिए उन्हें छोड़ दिया जाता है। विवरण के लिए en.wikipedia.org/wiki/Private_network देखें।

गुण

check_ip [R]
परदे के पीछे [आर]

पब्लिक क्लास के तरीके

new (app, ip_spoofing_check = true, custom_proxies = nil) स्रोत दिखाएं
# File actionpack/lib/action_dispatch/middleware/remote_ip.rb, line 62
def initialize(app, ip_spoofing_check = true, custom_proxies = nil)
  @app = app
  @check_ip = ip_spoofing_check
  @proxies = if custom_proxies.blank?
    TRUSTED_PROXIES
  elsif custom_proxies.respond_to?(:any?)
    custom_proxies
  else
    Array(custom_proxies) + TRUSTED_PROXIES
  end
end

एक नया RemoteIp मिडलवेयर इंस्टेंस बनाएं।

डिफ़ॉल्ट रूप से ip_spoofing_check विकल्प चालू है। जब ग्राहक अपने स्वयं के आईपी पते के बारे में झूठ बोलने की कोशिश कर रहा है तो ऐसा लगता है कि कोई अपवाद उठाया गया है। यह गैर-आईपी ग्राहकों (जैसे WAP डिवाइस), या एक गलत या भ्रामक तरीके से हेडर सेट करने वाले परदे के पीछे की साइटों पर इस चेक को बंद करने के लिए समझ में आता है (जैसे AWS ELB)।

custom_proxies तर्क Array of string, IPAddr, या Regexp ऑब्जेक्ट ले सकता है जो TRUSTED_PROXIES के बजाय उपयोग किया जाएगा। यदि एक स्ट्रिंग, IPAddr, या Regexp ऑब्जेक्ट प्रदान किया जाता है, तो इसका उपयोग TRUSTED_PROFIES के अतिरिक्त किया जाएगा। कोई भी प्रॉक्सी सेटअप आपके द्वारा अपने प्रॉक्सी सर्वरों के साथ X- फॉरवर्डेड-फॉर लिस्ट के मध्य (या शुरुआत में) में आपके इच्छित मूल्य को डाल देगा। यदि आपकी custom_proxies को हटाया नहीं गया है, तो उन्हें custom_proxies पैरामीटर के माध्यम से पास करें। इस तरह, मिडलवेयर उन IP पतों को अनदेखा कर देगा, और जो आप चाहते हैं उसे वापस कर देगा।

सार्वजनिक प्रवृत्ति के तरीके

# File actionpack/lib/action_dispatch/middleware/remote_ip.rb, line 78
def call(env)
  req = ActionDispatch::Request.new env
  req.remote_ip = GetIp.new(req, check_ip, proxies)
  @app.call(req.env)
end

चूंकि आईपी पते की आवश्यकता नहीं हो सकती है, इसलिए हम अनुरोधों के बहुमत को धीमा करने के लिए आईपी की गणना किए बिना ऑब्जेक्ट को यहां संग्रहीत करते हैं। उन अनुरोधों के लिए जिन्हें आईपी को जानने की आवश्यकता है, ActionDispatch::RemoteIp::GetIp#calculate_ip विधि ज्ञापन क्लाइंट आईपी पते की गणना करेगा।