2010-11-02 21 views
12

एक्शन कंट्रोलर स्रोत में, स्थानीय अनुरोध निम्नानुसार परिभाषित किए गए हैं:रेल एक्शन कंट्रोलर: request.remote_ip और request.remote_addr के बीच अंतर

def local_request? #:doc: 
    request.remote_addr == LOCALHOST && request.remote_ip == LOCALHOST 
end 

मेरे आवेदन में, यदि किसी विशेष आईपी रेंज से अनुरोध आ रहे हैं तो मैं अलग-अलग तर्क का उपयोग करना चाहता हूं। Xzx10 और request.remote_ip के बीच क्या अंतर है, और मुझे किस का उपयोग करना चाहिए?

उत्तर

13

मैं remote_ip के वर्तमान कार्यान्वयन के लेखक हूं, और अन्य चीजें जिनमें आईपी स्पूफिंग हमलों की जांच करना शामिल है, और कई X-Forwarded-For शीर्षकों को सही तरीके से संभालना शामिल है। एक बड़ी चेतावनी है, हालांकि: केवल कुछ रूबी वेब सर्वर एकाधिक शीर्षकों का समर्थन करते हैं, इसलिए मूल्य अभी भी गलत हो सकता है।

मैंने सबसे लोकप्रिय रूबी ऐप सर्वर on my blog का परीक्षण करने के परिणामों को लिखा, जो आप जांचना चाहेंगे कि दोहराए गए हेडर आपके आवेदन के लिए महत्वपूर्ण हैं या नहीं।

9

यह मामला है कि remote_addrREMOTE_ADDR वातावरण चर का मान देता है के रूप में है, जबकि remote_ip इस HTTP_X_FORWARDED_FOR और HTTP_CLIENT_IP चर की उपस्थिति के आधार पर इसे समायोजित कर लेगी, इस तरह के रूप में आप जब अपने ग्राहक है हो सकता है हो रहा है प्रॉक्सी के माध्यम से अग्रेषित किया जा रहा है।

local_request? के लिए डबल चेक यह सुनिश्चित करने का एक तरीका है कि उपयोगकर्ता स्थानीय मशीन से आया है, और उसे स्थानीय प्रॉक्सी के माध्यम से कहीं और से अग्रेषित नहीं किया गया था।