我们都知道,当使用在$_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');
}