2009-07-10 7 views
1

これはかなり安全ですか?私が逃した何か?ユーザー入力が含まれています

$page = sprintf("%s/%s.php", "pages", $_GET['page']); 
if (file_exists($page)) { 
    include $page; 
} 
else { 
    echo "The page '$page' does not exist =("; 
} 

(はい、あなたがそれを使用することができます)

+0

スラッシュ、スペース、ドット、またはファイルシステムでディレクティブとして使用できるものを削除することをお勧めします。 – thesmart

答えて

4

これを行うには、「より良い」の方法は、許可されたページの配列を持っているし、このような何かを行うことです:

$all_pages = glob('pages/*.php'); 

ドキュメント:in_arrayglob

+0

thatsスマート、ありがとう –

4

、ユーザーが任意に、彼らはのように感じるものは何でもページをロードすることができますので、それは安全ではないのです。あなたが確実な場合

0

$_GET['page']には/または..ありませんし、訪問者がpagesディレクトリ内の任意のPHPファイルを表示することが許可されていることを、私はそれは大丈夫だと思います。あなたは簡単にこのような何かを行うことによって、すべての許可されたページのリストを取得することができ

$page = $_GET['page'] . '.php'; 
if(in_array($page, $all_pages)) { 
    include('pages/' . $page); 
} 

0

利用basename()供給されて何のパス情報がありませんことを確認する:

$page = sprintf("%s/%s.php", "pages", basename($_GET['page'])); 
if (file_exists($page)) { 
     include $page; 
} 
else { 
     echo "The page '$page' does not exist =("; 
} 
関連する問題