2

PHP で構築された Web アプリケーション用の安全な単一エントリ ポイント アーキテクチャをセットアップする方法に関するチュートリアルを見つけようと努力しましたが、良いものを見つけることができませんでした。私の検索クエリが悪かったのかもしれません... Laravelのコードを見るのは良い考えのように思えましたが、頭が回転する良い方法です。あまりにも多くのことが起こっているので、私には理解できません。

そうは言っても、アプリへの適用が簡単で、同時に安全な (たとえば、ローカル ファイルのインクルージョンからの保護) アーキテクチャを作成するにはどうすればよいでしょうか?

4

1 に答える 1

5

まず、すべてのリクエストを単一の PHP ファイルにリダイレクトする必要があります。その部分は、 Apache の.htaccessで行うか、他のサーバーの対応する部分です。

次に、 で表示できるデータを調べる必要があります$_SERVER。を使用するのは非常に一般的$_SERVER['PATH_INFO']ですが、選択はリクエストをどの程度正確に書き換えるかによって異なります。

次に、正規表現のリストを持ち、取得した URL フラグメントとの照合を試みるルーターを作成する必要があります。

いくつかのアイデアを提供するいくつかの例を次に示します。

  • '#^/(?P<page>[^/\\\\.,;?\n]+)$#'
  • '#^/user/(?P<id>[0-9]+)/(?P<nickname>[^/\.,;?\n]+)$#'
  • '#^(?:/test/(?P<parameter>[^/\\\\.,;?\n]+))?/mandatory$#'

これらの正規表現をより単純な表記法から生成するのが一般的な方法ですが、最初の反復ではあまり注目すべきではありません。

また、オプションのフラグメントを持つ式を使用する場合は、「フォールバック」値も提供する必要があります。これらの値は、フラグメントが指定されていない場合にデフォルトとして使用されますが、パターンは一致します。

私が行う方法は、PHP では次のようになります。

/*
 * Routing mechanism
 */

$uri = isset( $_SERVER[ 'PATH_INFO' ] )
            ? $_SERVER[ 'PATH_INFO' ]
            : '/';

$builder = new RequestBuilder;
$request = $builder->create();
$request->setUri( $uri );

$router = new Router( new RouteBuilder );
$router->import(
    $reader->getAsArray( __DIR__ . '/config/routes.json' )
);

$router->route( $request );

この後、変数にはオブジェクトが含まれ、コマンドや など$requestのコマンドを使用して特定のパラメーターを照会できます。$id = $request->getParameter('id')$controller = $request->getParameter('controller')

パターン自体を台無しにしない場合、抽出した値は、許可されていないファイルのインクルードに対して安全です。

于 2013-08-24T07:26:07.123 に答える