2017-08-16 12 views
0

を表示私は...ややPHPでニュービーだだから何イムやろうとして含まれている場合、このようなURLを取得するには、次のコードPHP他_getがエラー

<?php include $_GET['topic']; ?> 

を使用してページを取得することですhttp://ulixtxteditor.org/entities/helpCentre?topic=credits しかし、ページが見つからない場合は、空文字のページではなくエラーを表示するためにelse文を使いたいと思います。私は何をすべきか? ex:http://ulixtxteditor.org/entities/helpCentre?topic=この部分はエラーを表示しますか?

<?php if(isset){include $_GET['topic'];} else {echo "error"} ?> 

私はこれを試しましたが、うまく動作しません。

+0

あなたの例はどのように機能しますか?ファイルタイプが – GrumpyCrouton

+3

ではありません。 "else文を使用します。"あなたを止めるのは何ですか? if/elseロジックはここにはありません。 –

+1

これはまた、パスでうまく動作しません。これは良い方法ではありません。あなたはMVCレイアウトをしようとしていますか?これは間違った方法です。 – GrumpyCrouton

答えて

2

使用は、このような何か:「ディレクトリトラバーサル」にあなたが脆弱なためincludeまたはrequire建設に直接$_GET['topic']を使用して

<?php 
// In case topic parameter wasn't provided you will have fallback. 
$topic = isset($_GET['topic']) ? $_GET['topic'] : ''; 
// Now you can check topic and have valid file name. 
switch ($topic) { 
    case 'credits': 
     $fileName = 'credits.php'; 
     break; 
    default: 
     $fileName = 'index.php'; 
     break; 
} 
// Now it is possible safely include file. 
include __DIR__ . DIRECTORY_SEPARATOR . $fileName; 

は安全ではありません。さらに、PHPスクリプトのCSSファイルなどのインクルードを避けるために、入力パラメータを常に検証する必要があります。

0

これは、単純なジャンクションボックス/ルータを実装するための一般的な方法です。 switch文を使用します。

$topic = isset($_GET['topic']) ? $_GET['topic'] : ''; 
switch ($page) { 
    case 'credit': 
    case 'otherpage': 
    case 'otherpage2': 
     require_once(dirname(__FILE__) . '/' . $page . '.php'); 
     break; 
    default 
     require_once(dirname(__FILE__) . '/' . 'default.php');  
} 

あなたがそれぞれの上部にcase文を追加して、ページ/トピックをホワイトリストに登録し、一致するか、ページを持っていないものは、デフォルトのページをロードすることによって処理されます。

この例では、すべてのトピックページがこのスクリプト(通常はindex.phpという名前)と同じディレクトリにあると仮定しています。

2
<?php include $_GET['topic']; ?> 

このようにしないでください。大規模かつ容易に悪用されるセキュリティ上の脆弱性が存在します。例えば

  • ?topic=index.php - サーバ

  • ?topic=/proc/self/environからディスプレイ機密データを - - 無限ループ

  • ?topic=/etc/passwdを作成するには、プロセス環境からのコードを実行します。これにはHTTPヘッダーの値のようなユーザー制御のデータが頻繁に含まれ、リモートでコードが実行されます。あなたはこれを実装する場合

あなたのサイトに利用されます。この脆弱性のために公開Webサイトをスキャンするボットが数多くあり、その多くは検出時に自動的に攻撃を試みます。

GET変数の値に基づいてファイルを含める場合は、switch($_GET['topic')を使用して、その変数の許容値を定義します。これにより、エラー処理をdefault:句として実装することもできます。