2017-07-12 10 views
0

私は別のPHPファイルをインクルードするためにPHPスクリプトを使用します。誰かが間違った文字列でindex.phpに行くと、画面にエラーメッセージが表示されます。インクルードファイルが見つからない場合にエラーメッセージを返す方法

「あなたは間違ったリンクを使用しました。もう一度やり直してください。」などのカスタムエラーメッセージを表示するにはどうすればよいですか?ここで

は私が今やっているものです...

誰かがindex.phpファイルにそれらを取るだろうし、それがpを拾うでしょう

http://example.com/?p=14 

...このようにURLに来ます。 index.phpスクリプトでは、include ('p'.$p.'/index.php');を使用してディレクトリp14を検索し、そのディレクトリにindex.phpファイルが含まれています。

これまでの理由でp=が変更され、ディレクトリではないものが見つかっています。私はそれと戦って、そこに何か他のものを置くとエラーを表示したい。私はあまりにも多くのディレクトリを持っているので、私はちょうど私たちだけの単純なことはできませんので、追加しますif ($p != '14'){echo "error";}私はそれらの約45を作らなければならないでしょう。

私は簡単な言い方をしています.... "インクルードがうまくいかない場合は"エラー ";"

+1

これを含める前に、['file_exists()'](http://php.net/file_exists)を呼び出すことができます。存在しない場合は、エラーを表示してください。あなたは '..p'や他の潜在的に危険な入力を含めることができないように' $ p'をサニタイズ/フィルタリングするべきです。 – drew010

答えて

1

あなたにcode injectionに脆弱である可能性があるため、このインクルードソリューションを使用しないでください。

file_existsを使用しても、適切に保護されていないファイルにアクセスして攻撃者がアクセスできるため、良い解決策ではありません。

あなたはホワイトリストを使用する必要があり

:あなたがいないウェブにサーバーファイル構造を公開します。このように

$whiteList = array(
    "page1" => "/dir1/file1.php", 
    "page2" => "/dirabc/filexyz.php" 
) 
if (array_key_exists($p, $whiteList)) { 
    include_once($whiteList[$p]); 
} else { 
    die("wrong file"); 
} 

:ユーザーは、このように、エイリアスによって参照などが可能なファイルを含む辞書をあなたが許可したファイルだけが含まれることを保証します。

あなたはそれを使用する前に$pをサニタイズする必要があります。

$p = filter_input(INPUT_GET, "p", FILTER_SANITIZE_STRING); 

しかし、あなたが辞書に使用するキーに応じて、他のフィルタはreferenceを見て...使用する必要があります。

+0

ありがとうございます。私は自分自身をハックに開放していることは知らなかった。ホワイトリストにたくさんのページを追加する必要があったとしても、これは私にとって最良の選択だと思います。何をすべきか、どうしたらいいかを説明してくれてありがとう。 –

+0

私はあなたを手伝ってくれてとても嬉しいです!ありがとう! – Saleiro

1
if(!file_exists('p'.$p.'/index.php')) die('error'); 

require_once('p'.$p.'/index.php'); 
2
$filename = 'p'.$p.'/index.php'; 

解決法1:

if([email protected]($filename)) throw new Exception("Failed to include ".$filename); 

対処方法2:使用しfile_exists - ファイルまたはディレクトリが存在するかどうか、このチェックは、そうuは全く同じようにディレクトリを確認することができ

if (!file_exists($filename)) { 
    echo "The file $filename does not exist"; 
} 
関連する問題