PHP URL操作安全问题


PHP URL manipulation security issue

我们都知道,当使用在$_GET["filename"]中使用时,".."可以用于访问较低级别的文件结构

require("/folderwithtrustedfiles/" . $_GET["filename"]);

我的问题是:如果文件夹中所有具有可信任文件的文件都是可信任的,并且可以满足要求,那么这是否可以被视为安全的,或者除了..之外还有其他技巧吗。。是否包含其他文件夹中的文件?

if(strpos($_GET["filename"], "..") === false)
require("/folderwithtrustedfiles/" . $_GET["filename"]);

您可以键入以下url:

 http://yourserver.com/index.php?file=../config/db

我将使用realpath()强制执行基本路径。像这样:

 $filename = __DIR__ . '/content/' . $_GET['file'];
 if(strpos(realpath($filename), __DIR__ . '/content/') !== 0) {
     die('bad path');
 }