有没有简单的方法来初步确定了文件的处理请求,忽略得到的参数和操作(至少基本)的映射,比如/到/index.php?
理想情况下,我正在寻找的是类似的东西$_SERVER['REQUEST_URI'],除了它返回相同的值,无论get参数如何,该值是请求的文件,而不是URI,也不是当前正在执行的文件($_SERVER['PHP_SELF']).换句话说,一个$_SERVER['REQUESTED_FILE']或什么的.我没见过这样的东西.它是否存在,还是需要手动编写?
更新 以下是一些示例网址与我希望的结果配对:
example.com/mypage.php : /mypage.php
example.com/ : /index.php
example.com/foo/?hello=world : /foo/index.php
Run Code Online (Sandbox Code Playgroud)
即使在包含的文件中,这些返回值也是如此.在回答之前看到我的答案,我想我找到了我想要的东西.
dim*_*414 27
我决定自己测试一下.该$_SERVER['SCRIPT_NAME']变量提供了所请求文件的路径,即使它是索引文件,也没有获取参数或其他任何内容.PHP文档声明这包含文件的路径,但它似乎与文档根相对,就像PHP_SELF没有安全漏洞一样.
以下是我用来测试它的代码: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): /
Run Code Online (Sandbox Code Playgroud)
请求时的输出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
Run Code Online (Sandbox Code Playgroud)
如您所见,$_SERVER['SCRIPT_NAME']始终返回最初处理请求的文件,即URL中的文件,没有任何XSS风险.
$_SERVER['PHP_SELF']
Run Code Online (Sandbox Code Playgroud)
应该返回实际的脚本.但是有各种方法.
我有一个更好的链接到所有各种文件相关的环境变量的矩阵,但我找不到它.如果它出现我会编辑.
编辑:我发现了一个很好的SO线程,详细说明了它们之间的差异.
| 归档时间: |
|
| 查看次数: |
29051 次 |
| 最近记录: |