1

今、ファイルのみを要求しても安全かどうか疑問に思っていますrequire($path)

最も単純な例として
いくつかのフォーム フィールドfoldername. そのため、 require($somepath.'/'.$folder.'/'.$name.'.php')「../../admin/or/else/things/」と入力して簡単に再配置できます。

これは単純な例ですが、他の多くの移転方法があります (そうなると思います) $path

質問は次のとおりです。
- 着信パスのチェックを提供しますか?
- はいの場合..どうすれば正しくできますか?

4

2 に答える 2

2

ユーザー入力に基づいて別のファイルを要求する場合は、フォルダーと名前のフィールドを慎重に検証する必要があります。ユーザーが自分のファイル (おそらくアップロードしたばかりのファイル) やその他の厄介なものを要求することは望ましくありません。

理想的には、次のように許容値のリストを作成する必要があります。

$allowedIncludes = array('a/foo.php', 'b/bar.php'); // etc

次に、提供された名前とフォルダーのフィールドの組み合わせが有効かどうかを確認できます。

if(false !== array_search("$folder/$name", $allowedIncludes) {
  // OK
  // require ...;
} else {
  // not ok
}

ただし、ユーザーにこのような操作を許可する場合は、十分に注意してください。マシン上で任意のコードを実行することを許可したくありません。

于 2012-09-13T12:21:19.847 に答える
1

これが私のやり方です:

/* Valid Pages' Array */
$pages['welcome']['title'] = 'Welcome!';                // Page Title
$pages['welcome']['path'] = './pages/welcome.php';      // Physical Valid Path
$pages['welcome']['login'] = false;                     // Log-in Required?

$pages['my-account']['title'] = 'My Account';
$pages['my-account']['path'] = './user/my_account.php';
$pages['my-account']['login'] = true;

/* Requested Page */
$page = !empty($_REQUEST['page']) ? $_REQUEST['page'] : 'welcome';

/* Including ... */
if (file_exists($pages[$page]['path']))
    include($pages[$page]['path']);
else
    include($pages['404']['path']);
于 2012-09-13T12:35:15.373 に答える