有没有简单的方法来识别最初处理请求的文件,忽略获取参数并处理(至少是基本的)映射,例如/
to /index.php
?
理想情况下,我正在寻找类似的东西$_SERVER['REQUEST_URI']
,但无论 get 参数如何,它都会返回相同的值,并且该值是请求的文件,而不是 URI,也不是当前正在执行的文件($_SERVER['PHP_SELF']
)。换句话说,一个$_SERVER['REQUESTED_FILE']
或者其他的东西。我还没有见过这样的事情。它是否存在,或者我需要手动写一些东西?
Update以下是一些与我想要的结果配对的示例 URL:
example.com/mypage.php : /mypage.php
example.com/ : /index.php
example.com/foo/?hello=world : /foo/index.php
即使在包含的文件中,这些返回值也是 true。在回答之前请参阅下面的答案,我想我已经找到了我想要的东西。
我决定亲自测试一下。这$_SERVER['SCRIPT_NAME']
变量提供所请求文件的路径,即使它是索引文件,并且没有获取参数或其他任何内容。 PHP 文档指出这包含path文件的,但它似乎是相对于文档根目录的,就像PHP_SELF
,但不存在安全漏洞。
这是我用来测试这个的代码:https://gist.github.com/dimo414/5484870 https://gist.github.com/dimo414/5484870
请求时的输出example.com/?foo=bar
:
__FILE__: /var/www/index.php
PHP_SELF: /index.php
SCRIPT_NAME: /index.php
REQUEST_URI: /?foo=bar
parse_url(REQUEST_URI): /
__FILE__: /var/www/pathtest.php
PHP_SELF: /index.php
SCRIPT_NAME: /index.php
REQUEST_URI: /?foo=bar
parse_url(REQUEST_URI): /
以及请求时的输出example.com/index.php/<strong>XSS</strong>
:
__FILE__: /var/www/index.php
PHP_SELF: /index.php/XSS # note the XSS exploit (this is bold in browser)
SCRIPT_NAME: /index.php # No exploit here
REQUEST_URI: /index.php/%3Cstrong%3EXSS%3C/strong%3E
parse_url(REQUEST_URI): /index.php/%3Cstrong%3EXSS%3C/strong%3E
__FILE__: /var/www/pathtest.php
PHP_SELF: /index.php/XSS
SCRIPT_NAME: /index.php
REQUEST_URI: /index.php/%3Cstrong%3EXSS%3C/strong%3E
parse_url(REQUEST_URI): /index.php/%3Cstrong%3EXSS%3C/strong%3E
如你看到的,$_SERVER['SCRIPT_NAME']
始终返回最初处理请求的文件,即 URL 中的文件,没有任何 XSS 风险。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)