PHP में क्लाइंट IP एड्रेस: 2025 में गलती कैसे न करें

शुरुआती लोगों के लिए ऑनलाइन Python प्रशिक्षक

Python आसानी से सीखें बिना सिद्धांत के बोझ के। स्वचालित जांच के साथ व्यावहारिक कार्य हल करें और ब्राउज़र में सीधे कोड लिखें।

पाठ्यक्रम शुरू करें

IP की खोज: क्यों सिर्फ $_SERVER['REMOTE_ADDR'] अब काफी नहीं है?

\n\n

कल्पना करें: आपने PHP पर एक शानदार शैक्षिक प्रोजेक्ट लॉन्च किया। सब कुछ बढ़िया चल रहा है, उपयोगकर्ता खुश हैं। लेकिन फिर आप विज़िटर लॉगिंग, भौगोलिक लोकेशन, या वोट धोखाधड़ी से सुरक्षा जोड़ने का फैसला करते हैं। और तभी — बम! — पता चलता है कि आपके आधे "अनोखे" विज़िटर एक ही IP: 127.0.0.1 या 10.0.0.1 से आ रहे हैं। परिचित लग रहा है?

\n\n

PHP में क्लाइंट का असली IP एड्रेस प्राप्त करना एक क्लासिक समस्या है जो कभी पुरानी नहीं होती। Stack Overflow पर यह सवाल हज़ारों बार देखा जाता है, और नौसिखिए (और अनुभवी भी) बार-बार एक ही गलती करते हैं। 2025 में, जब Cloudflare, AWS, Nginx और ढेरों CDN प्रॉक्सी आम बात हैं, केवल $_SERVER['REMOTE_ADDR'] पर निर्भर रहना अंधेरे में तीर चलाने जैसा है।

\n\n

इस लेख में हम सिर्फ एक तैयार फंक्शन नहीं देंगे। हम HTTP हेडर की शारीरिक रचना को समझेंगे, दोस्त को दुश्मन से अलग करना सीखेंगे, और PHP में विज़िटर का IP एड्रेस प्राप्त करने का एक सुरक्षित और भरोसेमंद तरीका लिखेंगे जो 2025 में आपको निराश नहीं करेगा। चलिए शुरू करते हैं!

\n\n

REMOTE_ADDR: आपका वफादार, लेकिन अंधा कुत्ता

\n\n

बुनियाद से शुरू करते हैं। $_SERVER['REMOTE_ADDR'] — यह उस डिवाइस का IP है जो सीधे आपके वेब सर्वर से जुड़ा है। अगर आपकी साइट बिना किसी प्रॉक्सी के एक डेडिकेटेड सर्वर पर है, तो यही क्लाइंट का IP है। सरल और भरोसेमंद।

\n\n

लेकिन आधुनिक दुनिया में ऐसा कम ही होता है। अक्सर, उपयोगकर्ता और आपके PHP स्क्रिप्ट के बीच एक पूरी श्रृंखला होती है:

\n
    \n
  • CDN (Cloudflare, Fastly)
  • \n
  • लोड बैलेंसर (Nginx, HAProxy)
  • \n
  • रिवर्स प्रॉक्सी (Varnish, Nginx)
  • \n
  • शेयर्ड आर्किटेक्चर वाला होस्टिंग
  • \n
\n\n

और यहाँ REMOTE_ADDR अंतिम कड़ी का IP दिखाता है (जैसे आपके लोड बैलेंसर का), न कि असली उपयोगकर्ता का। एक शैक्षिक साइट के लिए यह आपदा है: आप मॉस्को के छात्र को न्यूयॉर्क के छात्र से अलग नहीं कर पाएंगे, और एंटी-स्पैम सिस्टम सभी को ब्लॉक कर देगा।

\n\n

HTTP हेडर: असली IP कहाँ छिपा है?

\n\n

असली क्लाइंट IP को भेजने के लिए, प्रॉक्सी सर्वर विशेष HTTP हेडर जोड़ते हैं। 2025 में सबसे लोकप्रिय हेडर:

\n\n

1. X-Forwarded-For (XFF)

\n

क्लासिक हेडर। इसमें IP की एक श्रृंखला हो सकती है: client_ip, proxy1_ip, proxy2_ip। सूची में पहला IP असली क्लाइंट का होता है। लेकिन एक समस्या है: यदि आपका इंफ्रास्ट्रक्चर इसे साफ नहीं करता, तो कोई भी हमलावर इस हेडर को नकली बना सकता है।

\n\n

2. X-Real-IP

\n

Nginx का पसंदीदा हेडर। इसमें सिर्फ एक IP होता है — असली। सरल और अधिक सुरक्षित, लेकिन सभी प्रॉक्सी इसका समर्थन नहीं करते।

\n\n

3. CF-Connecting-IP (Cloudflare)

\n

Cloudflare का विशिष्ट हेडर। यदि आप उनके CDN का उपयोग करते हैं, तो यह सबसे भरोसेमंद विकल्प है। लेकिन केवल तभी जब आप Cloudflare पर भरोसा करते हैं (और आपको करना चाहिए, वे अच्छे हैं)।

\n\n
\n महत्वपूर्ण: अज्ञात स्रोतों से X-Forwarded-For और X-Real-IP हेडर पर कभी भरोसा न करें। एक हमलावर कोई भी IP डाल सकता है, और आपका सिस्टम उसे असली मान लेगा।\n
\n\n

2025 की सर्वश्रेष्ठ प्रैक्टिस: बहु-स्तरीय सुरक्षा

\n\n

तो क्या करें? हम X-Forwarded-For से पहला IP नहीं ले सकते — यह खतरनाक है। लेकिन प्रॉक्सी को नज़रअंदाज़ भी नहीं कर सकते। समाधान — भरोसेमंद प्रॉक्सी की व्हाइटलिस्ट।

\n\n

विचार सरल है: हम अपने लोड बैलेंसर और CDN के IP पते जानते हैं। अगर अनुरोध उनसे आया है — तो हम हेडर पर भरोसा करते हैं। अगर नहीं — तो REMOTE_ADDR का उपयोग करते हैं।

\n\n

यहाँ PHP में एक कार्यशील क्लास है जो इस तर्क को लागू करती है:

\n\n
<?php\n\nclass ClientIP\n{\n    /**\n     * भरोसेमंद IP पतों और सबनेट (CIDR) की सूची।\n     * अपने प्रॉक्सी, CDN, लोड बैलेंसर के IP यहाँ जोड़ें।\n     */\n    private static array $trustedProxies = [\n        '127.0.0.1',          // localhost\n        '10.0.0.0/8',         // निजी नेटवर्क\n        '172.16.0.0/12',                

ब्लॉग

पुस्तक अनुशंसाएँ