【发布时间】:2014-08-28 00:56:28
【问题描述】:
假设我们有以下 PHP 脚本
if(isset($_GET['adr'])) {
$adr = $_GET['adr'];
include $adr.".txt";
}
我想加载一个非文本文件,为此我使用mysite.com/?adr=g:/file.asd%00 URL,另一方面,我们都知道 PHP 中的所有字符串都必须以 NULL 字节结尾(即 %00)。但是当我请求这个 URL 时,Apache 服务器会告诉我:
警告:include():无法在 G:\Program Files\EasyPHP-12.1\www\index 中打开 'g:/file.asd' 以包含 (include_path='.;C:\php\pear')。 php 在第 16 行
谁能告诉我为什么这不起作用?
谢谢
【问题讨论】:
-
PHP 中的字符串是空终止的吗?从什么时候开始?
-
"我们都知道 PHP 中的所有字符串都必须以 NULL 字节结尾"。不,他们不是。摆脱
%00。 -
问题不清楚(这应该做什么?你为什么希望它这样做?你到底想包含什么文件?)并且可能基于一个荒谬的前提.投票结束。
-
@deceze 我想包含
g:/file.asd,但在服务器端代码中将.txt附加到请求的文件中,但我想绕过它,并包含asd文件 -
@ABFORCE 你不能这样做。 This bug was fixed in PHP 5.3。 (我认为这是相关的,但也许不是我不确定你到底想要做什么。)