"सुरक्षित" या "असुरक्षित" मानों जैसी कोई चीज नहीं है। केवल ऐसे मान हैं जो सर्वर को नियंत्रित करता है और उन मूल्यों को जो उपयोगकर्ता नियंत्रित करता है और आपको इस बात से अवगत होना चाहिए कि एक मूल्य कहां से आता है और इसलिए यह निश्चित उद्देश्य के लिए विश्वसनीय हो सकता है या नहीं। $_SERVER['HTTP_FOOBAR']
उदाहरण के लिए डेटाबेस में स्टोर करना पूरी तरह से सुरक्षित है, लेकिन मैं निश्चित रूप से ऐसा नहीं करूंगा eval
।
जैसे, उन मूल्यों को तीन श्रेणियों में विभाजित करते हैं:
सर्वर नियंत्रित
ये चर सर्वर वातावरण द्वारा निर्धारित किए जाते हैं और पूरी तरह से सर्वर कॉन्फ़िगरेशन पर निर्भर करते हैं।
'GATEWAY_INTERFACE'
'SERVER_ADDR'
'SERVER_SOFTWARE'
'DOCUMENT_ROOT'
'SERVER_ADMIN'
'SERVER_SIGNATURE'
आंशिक रूप से सर्वर नियंत्रित
ये चर ग्राहक द्वारा भेजे गए विशिष्ट अनुरोध पर निर्भर करते हैं, लेकिन सीमित संख्या में मान्य मूल्य ही ले सकते हैं, क्योंकि सभी अमान्य मानों को वेब सर्वर द्वारा अस्वीकार कर दिया जाना चाहिए और स्क्रिप्ट के आह्वान का कारण नहीं बनना चाहिए। इसलिए उन्हें विश्वसनीय माना जा सकता है ।
'HTTPS'
'REQUEST_TIME'
'REMOTE_ADDR'
*
'REMOTE_HOST'
*
'REMOTE_PORT'
*
'SERVER_PROTOCOL'
'HTTP_HOST'
†
'SERVER_NAME'
†
'SCRIPT_FILENAME'
'SERVER_PORT'
‡
'SCRIPT_NAME'
* REMOTE_
मानों की गारंटी क्लाइंट के वैध पते के रूप में दी जाती है, जो कि टीसीपी / आईपी हैंडशेक द्वारा सत्यापित है। यह वह पता है जहां किसी भी प्रतिक्रिया को भेजा जाएगा। REMOTE_HOST
हालांकि रिवर्स DNS लुकअप पर निर्भर करता है और इसलिए आपके सर्वर के विरुद्ध DNS हमलों (जिस स्थिति में आपको कोई बड़ी समस्या है) के कारण खराब हो सकता है। यह मान एक प्रॉक्सी हो सकता है, जो कि टीसीपी / आईपी प्रोटोकॉल की एक सरल वास्तविकता है और आपके बारे में कुछ भी नहीं कर सकता है।
Server यदि आपका वेब सर्वर हेडर की परवाह किए बिना किसी भी अनुरोध का जवाब देता है HOST
, तो इसे असुरक्षित भी माना जाना चाहिए। देखें कि $ _SERVER ["HTTP_HOST"] कितना सुरक्षित है? ।
यह भी देखें http://shiflett.org/blog/2006/mar/server-name-versus-http-host ।
‡ https://bugs.php.net/bug.php?id=64457 , http://httpd.apache.org/docs/current/mod/core.html#usecanonicalphysicalport , http: //httpd.apache देखें। org / docs / 2.4 / आधुनिक / core.html # comment_999
पूरी तरह से मनमाना उपयोगकर्ता नियंत्रित मूल्य
ये मान बिल्कुल भी चेक नहीं किए जाते हैं और किसी भी सर्वर कॉन्फ़िगरेशन पर निर्भर नहीं करते हैं, ये पूरी तरह से ग्राहक द्वारा भेजी गई मनमानी जानकारी हैं।
'argv'
, 'argc'
(केवल CLI आह्वान पर लागू होता है, आमतौर पर वेब सर्वर के लिए चिंता का विषय नहीं)
'REQUEST_METHOD'
§
'QUERY_STRING'
'HTTP_ACCEPT'
'HTTP_ACCEPT_CHARSET'
'HTTP_ACCEPT_ENCODING'
'HTTP_ACCEPT_LANGUAGE'
'HTTP_CONNECTION'
'HTTP_REFERER'
'HTTP_USER_AGENT'
'AUTH_TYPE'
‖
'PHP_AUTH_DIGEST'
‖
'PHP_AUTH_USER'
‖
'PHP_AUTH_PW'
‖
'PATH_INFO'
'ORIG_PATH_INFO'
'REQUEST_URI'
(दागी डेटा हो सकता है)
'PHP_SELF'
(दागी डेटा हो सकता है)
'PATH_TRANSLATED'
- कोई अन्य
'HTTP_'
मूल्य
§ तब तक विश्वसनीय माना जा सकता है जब तक वेब सर्वर केवल कुछ निश्चित अनुरोध विधियों की अनुमति देता है।
‖ विश्वसनीय माना जा सकता है अगर प्रमाणीकरण पूरी तरह से वेब सर्वर द्वारा नियंत्रित किया जाता है।
सुपरग्लोबल $_SERVER
में कई पर्यावरण चर भी शामिल हैं। ये "सुरक्षित" हैं या नहीं, यह इस बात पर निर्भर करता है कि वे कैसे (और कहाँ) परिभाषित हैं। वे पूरी तरह से नियंत्रित उपयोगकर्ता से लेकर पूरी तरह से नियंत्रित उपयोगकर्ता तक हो सकते हैं।