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

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

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

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

परिचय: क्यों "सिर्फ REMOTE_ADDR" अब काम नहीं करता

\n

हर PHP डेवलपर ने कम से कम एक बार सोचा है: "क्लाइंट का IP एड्रेस कैसे प्राप्त करें?" Stack Overflow पर इस विषय पर सैकड़ों हज़ारों बार देखा गया है, और विहित उत्तर के नीचे दर्जनों स्पष्टीकरण टिप्पणियाँ हैं। समस्या यह है कि 2025 में सिर्फ $_SERVER['REMOTE_ADDR'] पर्याप्त नहीं है।

\n

आधुनिक वेबसाइटें CDN (Cloudflare, Akamai), लोड बैलेंसर और प्रॉक्सी सर्वर के पीछे रहती हैं। उपयोगकर्ता VPN या Tor के माध्यम से जुड़ते हैं। और हमलावरों ने हेडर को फर्जी बनाना सीख लिया है। यदि आप आगंतुक का वास्तविक IP पता जानना चाहते हैं - और साथ ही हमलों के लिए दरवाजा नहीं खोलना चाहते - तो आपको सिद्ध प्रथाओं को लागू करने की आवश्यकता है।

\n

इस लेख में, मैं दिखाऊंगा कि PHP में IP पहचान कैसे काम करती है, छिपे हुए खतरों का विश्लेषण करूंगा, और तैयार कोड दूंगा जिसे आप 2025 में सुरक्षित रूप से उपयोग कर सकते हैं।

\n\n

PHP IP एड्रेस को कैसे "देखता" है?

\n

जब ब्राउज़र सर्वर पर अनुरोध भेजता है, तो PHP स्वचालित रूप से सुपरग्लोबल ऐरे $_SERVER को भरता है। "वार्ताकार" के IP एड्रेस के लिए कुंजी REMOTE_ADDR जिम्मेदार है। एक आदर्श दुनिया में (बिना प्रॉक्सी के), यह क्लाइंट का IP है:

\n
<?php\n$ip = $_SERVER['REMOTE_ADDR']; // 192.168.1.5\n?>
\n

लेकिन वास्तविकता में सर्वर के पीछे अक्सर nginx, HAProxy या Cloudflare होता है। तब REMOTE_ADDR उपयोगकर्ता के बजाय प्रॉक्सी का IP दिखाता है। वास्तविक पता HTTP हेडर में भेजा जाता है:

\n
    \n
  • HTTP_X_FORWARDED_FOR — प्रॉक्सी के लिए मानक हेडर;
  • \n
  • HTTP_X_REAL_IP — nginx द्वारा उपयोग किया जाता है;
  • \n
  • HTTP_CF_CONNECTING_IP — Cloudflare के लिए विशिष्ट;
  • \n
  • HTTP_CLIENT_IP — शायद ही कभी, लेकिन मिलता है।
  • \n
\n

समस्या: इनमें से कोई भी हेडर फर्जी हो सकता है। यदि आप बिना जांचे $_SERVER['HTTP_X_FORWARDED_FOR'] पर भरोसा करते हैं, तो हमलावर आसानी से दूसरे का IP डाल सकता है।

\n\n

REMOTE_ADDR बनाम X-Forwarded-For: कब क्या उपयोग करें?

\n

यहाँ मुख्य नियम है जो आपको सिरदर्द से बचाएगा:

\n
    \n
  • यदि साइट बिना प्रॉक्सी के सीधे सर्वर पर है — केवल REMOTE_ADDR का उपयोग करें।
  • \n
  • यदि साइट विश्वसनीय प्रॉक्सी (CDN, लोड बैलेंसर) के पीछे है — हेडर से IP लें, लेकिन केवल यह जांचने के बाद कि अनुरोध आपके प्रॉक्सी से आया है।
  • \n
\n

2025 में, डी-फैक्टो मानक X-Forwarded-For है। इसके अंदर IP की एक श्रृंखला हो सकती है: client, proxy1, proxy2। पहला पता क्लाइंट का है, अंतिम अंतिम प्रॉक्सी का पता है।

\n\n

X-Forwarded-For पर आँख बंद करके भरोसा क्यों नहीं करना चाहिए?

\n

कल्पना करें: हमलावर हेडर X-Forwarded-For: 127.0.0.1 के साथ अनुरोध भेजता है। यदि आपका कोड बस $_SERVER['HTTP_X_FORWARDED_FOR'] पढ़ता है, तो आपको 127.0.0.1 (लोकल होस्ट) मिलेगा। लॉग, एनालिटिक्स, जियोलोकेशन - सब कुछ टूट जाएगा। इससे भी बुरा, हमलावर किसी अन्य उपयोगकर्ता का IP डाल सकता है ताकि उसके रूप में प्रस्तुत हो सके।

\n

समाधान: हेडर X-Forwarded-For पर केवल तभी भरोसा करें जब REMOTE_ADDR आपके विश्वसनीय प्रॉक्सी के IP के बराबर हो। अन्यथा नहीं।

\n\n

2025 का सर्वोत्तम अभ्यास: IP प्राप्त करने का सार्वभौमिक फंक्शन

\n

मैंने एक सिद्ध तर्क एकत्र किया है जो सभी आधुनिक वास्तविकताओं को ध्यान में रखता है। फंक्शन:

\n
    \n
  1. जाँचता है कि अनुरोध विश्वसनीय प्रॉक्सी के माध्यम से आ रहा है या नहीं (आप उनकी सूची निर्धारित करते हैं)।
  2. \n
  3. यदि हाँ — X-Forwarded-For से पहला IP निकालता है।
  4. \n
  5. यदि नहीं — REMOTE_ADDR लौटाता है।
  6. \n
  7. निजी और आरक्षित पतों को फ़िल्टर करता है (वैकल्पिक)।
  8. \n
\n
<?php\n/**\n * क्लाइंट का वास्तविक IP पता प्राप्त करता है।\n * \n * @param array $trustedProxies विश्वसनीय प्रॉक्सी IP की सूची\n * @return string IP पता या '0.0.0.0' यदि निर्धारित नहीं किया जा सका\n */\nfunction getClientIP(array $trustedProxies = []): string {\n    $remoteAddr = $_SERVER['REMOTE_ADDR'] ?? '0.0.0.0';\n                

ब्लॉग

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