मान लें कि एक साधारण सेटअप है (CentOS 7, Apache 2.4.x, और PHP 5.6.20) और केवल एक वेबसाइट (वर्चुअल होस्टिंग नहीं मान रहा है) ...
PHP के अर्थ में, httpd.conf में आपके अपाचे कॉन्फ़िगरेशन ( निर्देश के साथ ) के आधार पर सुपरग्लोबल $_SERVER['SERVER_NAME']
में एक तत्व PHP रजिस्टर है (इसे शामिल वर्चुअल होस्ट कॉन्फ़िगरेशन फ़ाइल से, जो भी हो, आदि ...)। HTTP_HOST HTTP हेडर से लिया गया है । इसे यूजर इनपुट मानें। उपयोग करने से पहले फ़िल्टर और मान्य करें।$_SERVER
**ServerName**
UseCanonicalName On
host
यहाँ एक उदाहरण है जहाँ मैं $_SERVER['SERVER_NAME']
तुलना के आधार के रूप में उपयोग करता हूँ । निम्नलिखित विधि एक ठोस बच्चे वर्ग से है जिसे मैंने नाम दिया है ServerValidator
(बच्चे का Validator
)। ServerValidator
उपयोग करने से पहले $ _SERVER में छह या सात तत्वों की जाँच करता है।
यह निर्धारित करने में कि HTTP अनुरोध POST है, मैं इस पद्धति का उपयोग करता हूं।
public function isPOST()
{
return (($this->requestMethod === 'POST') && // Ignore
$this->hasTokenTimeLeft() && // Ignore
$this->hasSameGETandPOSTIdentities() && // Ingore
($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')));
}
जब तक इस विधि को कहा जाता है, तब तक प्रासंगिक $ _SERVER तत्वों के सभी फ़िल्टरिंग और सत्यापन घटित हो जाते हैं (और प्रासंगिक गुण सेट होते हैं)।
रेखा ...
($this->httpHost === filter_input(INPUT_SERVER, 'SERVER_NAME')
... जाँचता है कि $_SERVER['HTTP_HOST']
मूल्य (अंततः अनुरोधित host
HTTP हेडर से प्राप्त होता है ) मेल खाता है $_SERVER['SERVER_NAME']
।
अब, मैं superglobal बात का उपयोग कर रहा मेरी उदाहरण समझाने के लिए है, लेकिन वह यह है कि सिर्फ इसलिए कि कुछ लोगों के साथ अपरिचित हैं INPUT_GET
, INPUT_POST
और INPUT_SERVER
संबंध में करने के लिए filter_input_array()
।
लब्बोलुआब यह है, मैं अपने सर्वर पर POST अनुरोधों को संभाल नहीं जब तक सभी चार शर्तों को पूरा कर रहे हैं। इसलिए, POST अनुरोधों के संदर्भ में, HTTP host
हैडर प्रदान करने में विफलता (पहले के लिए परीक्षण की गई उपस्थिति) सख्त HTTP 1.0 ब्राउज़रों के लिए कयामत को बढ़ाती है। इसके अलावा, अनुरोध किया मेजबान मूल्य से मेल खाना चाहिए के लिए में httpd.conf , मूल्य के लिए, और, विस्तार से में superglobal। फिर से, मैं PHP फ़िल्टर फ़ंक्शंस के साथ उपयोग करूंगा , लेकिन आप मेरे बहाव को पकड़ लेंगे।ServerName
$_SERVER('SERVER_NAME')
$_SERVER
INPUT_SERVER
ध्यान रखें कि अपाचे अक्सर उपयोग करता ServerName
में मानक रीडायरेक्ट (जैसे कि URL बंद स्लैश छोड़ने के रूप में: उदाहरण के लिए, http://www.foo.com बनने http://www.foo.com/ ), भले ही आप नहीं कर रहे हैं URL पुनर्लेखन का उपयोग करना।
मैं $_SERVER['SERVER_NAME']
मानक के रूप में उपयोग करता हूं , नहीं $_SERVER['HTTP_HOST']
। इस मुद्दे पर बहुत कुछ आगे और पीछे है। $_SERVER['HTTP_HOST']
खाली हो सकता है, इसलिए यह ऊपर मेरी सार्वजनिक पद्धति जैसे कोड सम्मेलनों को बनाने का आधार नहीं होना चाहिए। लेकिन, सिर्फ इसलिए कि दोनों सेट हो सकते हैं गारंटी नहीं है कि वे समान होंगे। परीक्षण सुनिश्चित करने के लिए सबसे अच्छा तरीका है (अपाचे संस्करण और PHP संस्करण को ध्यान में रखते हुए)।