2016-07-02 27 views
0

私はウェブサイトで見たテクニックがあります。固定されたindex.phpファイルが1つあり、そのファイルにページが動的に含まれています。URLをインクルードページで更新し、新しいURLに更新したURLを

<?php 
    if ($_GET['page']) 
    { 
     $url= $_GET['page'].".php" ; 
     if(is_file($url)) 
     { 
      include $url; 
     } 
     else 
     { 
      echo ' requested page is not found :'.$url; 
     } 
    } 
    else 
    { 
     include 'home.php'; 
    } 
?> 

と任意のherfの場所がありますのindex.phpページ= ToPage

URLはwww.siteのようになります?

は、私はこの内のコードを持っているのindex.phpを持つような意味します。 com/index.php?page = page1、www.site.com/index.php?page=page2など..

他のサイトでは、ほとんどのサイトが通常のページへの移動を使用します。あなたは別のページに行ってください。 このようにURLはwww.site.com/index.php、www.site.com/page1、www.site.com/page2.phpになります。

私はすべての方法の利点\短所は何かを知りたいです。 最初の方法を使用するのは安全ですか?

答えて

0

1 www.site.com/index.php?page=page1

この方法は危険なデータは、ユーザによって操作することができるように、すべての推奨はありません。

2. www.site.com/page1

これはちょうど、かなりURL書き換えです。これは、Apacheサーバの.htaccessコードを使用し、サーバブロックのURL書き換えをnginxコンフィギュレーションファイルに設定することで実現できます。しかし、あなたはこれを上記の方法で実装するセキュリティ上の欠陥があります。

includeまたはrequireを使用すると、Path Traversal攻撃が発生する可能性があります。ここ

詳細:一つの選択肢は、実際のパスを比較することができhttps://www.owasp.org/index.php/Path_Traversal

:第二に

$basepath = '/foo/bar/baz/'; 
$realBase = realpath($basepath); 

$userpath = $basepath . $_GET['path']; 
$realUserPath = realpath($userpath); 

if ($realUserPath === false || strpos($realUserPath, $realBase) !== 0) { 
    //Directory Traversal! 
} else { 
    //Good path! 
} 

を、あなたが何か良い、信頼できるルーティングライブラリまたはパッケージを使用することができます。

+0

ありがとうございました。 しかし、私は "Path Traversal"をajaxを使って簡単に作ることができると思います。使用して : $(ドキュメント).ready(関数(){$ アヤックス({URL: "../anyPage.php"、 \t \t非同期:偽、 \t \tコンテキスト:$( "身体") 、 \t \tエラー:関数(E){警告( "エラーが発生しました:" + xhr.status + "" + xhr.statusText)}、 \t \t成功:機能(結果){ $( "身体") .html(結果); }}); }); 私は書きますか? – shamaseen

+0

これはうまくいかないと思います。 –

関連する問題