0

問題が発生しています。私はこのコードを持っています:

$theUrl = $_GET["url"];
include("$theUrl.php");

これにより、次のようなURLが取得されます。http://mywebsite.com/index.php?url=test

しかし、誰かが入れたらどうなるでしょう:

http://mywebsite.com/index.php?url=http://theirwebsite.com/someEvilscript

これを回避する方法は?他のWebサイトからではなく、サーバー上にあるスクリプトのみを実行したい。手伝ってくれてありがとう。

4

3 に答える 3

2

これを処理する良い方法の 1 つは、含めることができるファイルのホワイト リストを定義することです。そのリストにないものがあれば、それは悪と見なされ、決して含まれるべきではありません。

例えば ​​:

<?php
$allowed = array('file1', 'file2', 'file3');

if (in_array($_GET["url"], $allowed)) {
    // You can include
} else {
   // Error message and dont include
}
?>

注:コメントで示唆されているように、許可されたディレクトリをスキャンすることにより、許可されたリストを動的に設定できます。

于 2010-12-10T19:30:17.507 に答える
0

そのようなコードを実際に持つべきではありません。そして、私は本当に意味します。これで何を達成しようとしていますか?リスクなしで同じことを行う別の方法があると確信しています(そして、一般的な醜さを言いましょう)。

HoLyVieR が示唆するように、含めることができるものをホワイトリストに登録することが、現在のコードを安全にするための鍵となります。

于 2010-12-10T19:31:50.900 に答える
0

test.phpサイトで作成してhttp://mywebsite.com/test.php、リンクで使用してみませんか? このようにして、必要に応じて初期化スクリプトをtest.php(および他のスクリプトに) 含めることができます。

于 2010-12-10T19:32:38.273 に答える