URL中NULL字节的问题


Issue with NULL byte at URL

假设我们有以下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(): Failed open 'g:/file。asd' for include (include_path='.;C:'php'pear') in G:'Program Files'EasyPHP-12.1'www'index.php on line 16

谁能告诉我为什么这不起作用?
由于

不考虑基于用户输入而不进行验证的include文件的巨大安全隐患,下面是我要做的:

if( strpos($adr,".") === false) $adr .= ".txt";

基本上,如果没有文件扩展名(或者至少,看起来可能是文件扩展名)

,则仅追加.txt

我不知道在url中使用NULL字节。

创建URL和传递参数时,应该使用如下的urlencode函数:

$x = 'ysite.com/?adr='.urlencode('g:/file.asd');

,你应该确保文件g:/file.asd.txt存在

附加问题-你确定你保存了你的文件吗?在警告中有Failed opening 'g:/file.asd' for inclusion,在你的代码中包含g:/file.asd.txt文件。

当然,您只能在本地主机上这样做。如果你在实时服务器上这样做,不要这样做,因为任何人都可以快速显示所有文件系统数据并做任何他们想做的事情。