2014-06-24 4 views
6

PHP के साथ मैं $ _SERVER सरणी में "REDIRECT_STATUS" इंडेक्स देख सकता हूं लेकिन php.net इसका कोई उल्लेख नहीं करता है। मेरे पास एक कस्टम त्रुटि पृष्ठ है जो 404 फेंकता है लेकिन "REDIRECT_STATUS" अभी भी 200 है। तो स्थिति कोड वास्तव में क्या है?

+3

[** 'इसे कुछ प्रकाश डालना चाहिए ** **] (http://www.php.net//manual/en/reserved.variables.server.php#105602) (php.net से लिया गया $ _SERVER मैनुअल) – Darren

+0

हाँ मैंने देखा कि यह वास्तव में इस तरह से समझ में नहीं आता है कि मैं समझ सकता हूं। – billynoah

+1

ये चर जो भी चल रहा है PHP से आते हैं ... आपके मामले में, शायद आपका वेब सर्वर। आप किस सर्वर का उपयोग कर रहे हैं? – Brad

उत्तर

1

मैंने कभी भी इस HTTP शीर्षलेख का उपयोग कभी नहीं किया है, लेकिन यूआरएल @ डैरेन द्वारा पोस्ट किए गए यूआरएल के बारे में मैं क्या समझ सकता हूं यह है कि आप अपनी सभी त्रुटियों को इंगित कर सकते हैं (वे त्रुटियां जो 4xx या 5xx HTTP शीर्षलेख में परिणाम देती हैं) पर सिर्फ एक php फ़ाइल। और उस PHP फ़ाइल में आप यह जान सकते हैं कि इस REDIRECT_STATUS HTTP शीर्षलेख तक पहुंचने से कौन सी विशिष्ट त्रुटि उत्पन्न होती है।

+0

'REDIRECT_STATUS' एक" HTTP शीर्षलेख "नहीं है। HTTP अनुरोध शीर्षलेख '$ _SERVER' सरणी में 'HTTP_

' तत्वों में परिवर्तित हो गए हैं। 'REDIRECT_STATUS' सर्वर द्वारा सेट किया गया है (PHP तब यह' $ _SERVER' सुपरग्लोबल में भी उपलब्ध कराने के लिए अपनी बात करता है)। अपाचे के मामले में यह एक पर्यावरण चर है जो एक आंतरिक उप-अनुरोध (जिसमें रीराइट्स शामिल है, लेकिन रीडायरेक्ट नहीं करता है) सेट किया जाता है और त्रुटि के मामले में HTTP स्थिति कोड पर सेट किया जाता है (मामले में एक आंतरिक सबरेक्वेट एक कस्टम त्रुटि दस्तावेज़)। – MrWhite

3

php-src codedocumentation link पता चलता है, अर्थात्

<p>For more information as to <i>why</i> this behaviour exists, 
see the <a href=\"http://php.net/security.cgi-bin\">\ 
manual page for CGI security</a>.</p>\n\ 

सीजीआई सुरक्षा के बारे में पढ़ने के लिए। REDIRECT_STATUS चर के साथ - यह कोई HTTP शीर्षलेख नहीं है लेकिन एक चर जो वेब सर्वर से सीजीआई प्रोग्राम में पास किया गया है, इस मामले में php-cgi या php-fpm प्रक्रिया - आप php-cgi या php-fpm प्रक्रिया को बताते हैं अनुरोध को वेब सर्वर द्वारा नियंत्रित तरीके से संसाधित किया गया है और किसी भी तरह से, इन CGI स्क्रिप्ट को सीधे एक्सेस करके।

ऐतिहासिक रूप से आपने एक विशेष निर्देशिका में सीजीआई बाइनरी को संभालने के लिए वेब सर्वर को कॉन्फ़िगर किया - $DOCROOT/cgi-bin जैसे कुछ - और आपने कुछ यूजी http://SERVERNAME/cgi-bin/ के माध्यम से सभी सीजीआई स्क्रिप्ट को सुलभ बनाया।

अब, अगर आप इस तरह के एक (प्रत्यक्ष) यूआरएल http://SERVERNAME/cgi-bin/php-cgi/PATH_TO_PHP_SCRIPT के माध्यम से एक PHP सीजीआई प्रोग्राम कहते हैं, php-cgi के डिफ़ॉल्ट व्यवहार दस्तावेज़ /PATH_TO_PHP_SCRIPT कार्रवाई करने के लिए वेब सर्वर का उपयोग नियंत्रण बाईपास सकता है और इस तरह। /PATH_TO_PHP_SCRIPT दस्तावेज़ संसाधित हो जाएगा, हालांकि सर्वर/PATH_TO_PHP_SCRIPT को अस्वीकार कर सकता है, क्योंकि अनुरोध पहले ही वेब सर्वर छोड़ चुका है और PHP प्रक्रिया में प्रवेश किया है। PHP की सहायता से, ऐसा सर्वर जानकारी रिसाव करेगा और आपको सभी PHP स्क्रिप्ट के लिए एक और एक्सेस चेक लेयर की आवश्यकता होगी।

इस व्यवहार को रोकने के लिए आप सीधे अनुरोध में सेट करने के लिए REDIRECT_STATUS हैडर सेट करने वाले अनुरोधों को संभालने के लिए PHP-CGI प्रोग्राम को कॉन्फ़िगर कर सकते हैं, जो बाहरी क्लाइंट के लिए असंभव है। केवल वेब सर्वर - क्लाइंट और PHP के बीच बीच में - यह हेडर सेट कर सकता है और वेब सर्वर एक HTTP स्थिति - जैसे कि 200, 404, 403 या आपको पसंद है - और PHP को इस स्थिति को संसाधित करने की अनुमति देता है। लेकिन इस हेडर का शुद्ध अस्तित्व भी PHP प्रक्रिया को सूचित करता है, कि अनुरोध वेब सर्वर द्वारा नियमित तरीके से संसाधित किया गया है।

राय: इस तरह के एक प्रयोग के खिलाफ की रक्षा करने के लिए बेहतर तरीका हो सकता है, वेब सर्वर करने के लिए डिफ़ॉल्ट/cgi-bin/पथ के माध्यम से पीएचपी सीजीआई को प्रत्यक्ष कॉल की अनुमति नहीं देने के लिए कॉन्फ़िगर करने।

संबंधित मुद्दे