1

".." を $_GET["filename"] で使用すると、ファイル構造の下位レベルにアクセスできることは誰もが知っています。

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

私の質問は次のとおりです: folderwithtrustedfiles内のすべてのファイルが信頼されていて、require に問題がない場合、これは安全であると見なすことができますか、または.. 以外に他のフォルダーのファイルを含めるためのトリックはありますか?

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

1 に答える 1

1

次の 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');
 }
于 2013-07-08T09:47:24.433 に答える