एक बेहतर कोड उदाहरण होगा:
if ($_SERVER['SCRIPT_NAME'] === $thisPage) { }
फिर भी, यह $ thisPage की सामग्री पर निर्भर करता है। $ ThisPage $_SERVER['PHP_SELF']
भी शामिल है, तो आप $_SERVER['SCRIPT_NAME']
करने के लिए कि क्या तुम सच में बदलने के __FILE__
और $_SERVER['SCRIPT_NAME']
तरह के विकल्प का उपयोग नहीं कर सकते हैं, और सुनिश्चित करें कि आप शामिल चेकों को समझने हाँ बनाना चाहिए।
उदाहरण के लिए, इस यूआरएल: http://example.com/sick.php/mwuahahahaha
देता है:
/sick.php/mwuahahahaha
की तुलना सीएसएस की तरह गैर महत्वपूर्ण बातों के लिए, अनुमति दी है।
यदि अनुरोधित पथ (कोई यूआरएल पुनः लिखने) की आवश्यकता नहीं है, तो $_SERVER['SCRIPT_NAME']
का उपयोग करें। तुम सच में $_SERVER['PHP_SELF']
(rewrited यूआरएल) की जरूरत है, उन्हें जब outputting (htmlentities($_SERVER['PHP_SELF'])
का उपयोग कर से बचने के
चर का अवलोकन:।
इन चरों की तुलना के बीच सिर्फ कच्चे डेटा है भी पर्याप्त होना चाहिए। सर्वर http://xampp.org/ से था।
<?php
$properties = array('SCRIPT_FILENAME', 'SCRIPT_NAME', 'PHP_SELF', 'REQUEST_URI');
printf("% 15s: %s\n", '__FILE__', __FILE__);
foreach($properties as $property){
printf('% 15s: %s', $property, $_SERVER[$property]."\n");
}
?>
टेस्ट:
$ nc localhost 80
GET ///somedir/./../////test.php/somedata%20here?q%00=%25 HTTP/1.0
HTTP/1.1 200 OK
Server: Apache/2.2.14 (Unix)
[stripped]
__FILE__: /opt/lampp/htdocs/test.php
SCRIPT_FILENAME: /opt/lampp/htdocs/test.php
SCRIPT_NAME: /////test.php
PHP_SELF: /////test.php/somedata here
REQUEST_URI: ///somedir/./../////test.php/somedata%20here?q%00=%25
RewriteRule ^page/test test.php
का उपयोग करना:
$ nc localhost 80
GET ///somedir/./../page//.////test/somedata%20here?q%00=%25 HTTP/1.0
HTTP/1.1 200 OK
Server: Apache/2.2.14 (Unix)
[stripped]
__FILE__: /opt/lampp/htdocs/test.php
SCRIPT_FILENAME: /opt/lampp/htdocs/test.php
SCRIPT_NAME: /test.php
PHP_SELF: /test.php
REQUEST_URI: ///somedir/./../page//.////test/somedata%20here?q%00=%25
निष्कर्ष: अनुरोध की गई फ़ाइल test.php
है, जो होता है ज्यादातर मामलों में उपयोग करने के लिए सबसे सुरक्षित चर $_SERVER['SCRIPT_NAME']
है।
+1 यह PHP_SELF का दुरुपयोग करने का एकमात्र संभावित तरीका है जिसे मैं जानता हूं। यह कुछ परिस्थितियों में समस्याएं पैदा कर सकता है यदि किसी फॉर्म या किसी चीज़ के लिए बेस यूआरएल के रूप में उपयोग किया जाता है, लेकिन ओपी द्वारा दिखाए गए तुलना में उपयोग में सुरक्षित होगा। –
मेरा मानना है कि आपके पास यह गलत है। $ _SERVER ['PHP_SELF'] में हमेशा चल रहे स्क्रिप्ट का पथ होता है। आप REQUEST_URI के बारे में सोच रहे हैं। – Codeacula
मैंने अभी इसे फिर से परीक्षण किया है: 'http: //localhost/xampp/phpinfo.php/whatDidYouSay?% 25' देता है:' _SERVER ["PHP_SELF"] \t/xampp/phpinfo.php/whatDidYouSay'। REQUEST_URI और भी बदतर है: 'xxp/phpinfo.php/whatDidYouSay?% 25'। इस 'फीचर' को ['Pathinfo'] कहा जाता है (http://httpd.apache.org/docs/current/mod/core.html#acceptpathinfo) – Lekensteyn