0

フレームワークがユーザーがアクション/データサービススクリプトに直接アクセスするのをどのように妨げているのか疑問に思っています。

たとえば、www.test.com/test.htmlテンプレートのtest.html呼び出しに移動しますtest_action.php。このアクションスクリプトが直接存在するディレクトリにユーザーがアクセスできないようにするにはどうすればよいですか?

そのようなwww.test.com/index/actions/test_action.php

サーバーのアクセス許可はどのように構成されているので、 。test_action.phpを介してのみアクセスできますtest.html

  • 共有ホスティングサーバーのdoc-rootで立ち往生している場合
  • 私がショーを実行している場合〜IE私のApacheサーバー
4

2 に答える 2

2

何もせず、test_action.phpがdocrootの下にある場合、ユーザーはそれにアクセスできます。これに対処するにはいくつかの方法がありますが、それが受け入れられない場合(サーバーにPHPが適切にインストール/構成されている場合、ソースコードは表示され、ソースコードの出力のみが表示されることに注意してください)。

ユーザーがそのスクリプトの出力を直接表示できない場合は、次のいずれかの方法を選択できます。

  1. 保護されたすべてのスクリプトをHTTPサーバーのdocrootのに配置し、../includesなどを使用してそれらを参照します
  2. apacheアクセス制御ファイルを使用して、.phpへの要求を拒否します(パスで切断します)。
  3. entry.phpグローバル定数を宣言するという名前のファイルを作成し、最初にすべての有効なエントリポイントからそのファイルを含め、次に保護された各スクリプトにその定数の存在を確認します(IIRC、これはCodeIgniterが行うことです)。

一般的に、#1が推奨されます。それが良くない場合、#2は非常に効率的であり、#3はIMOです。

于 2012-07-06T16:16:24.340 に答える
2

PHPフレームワークがこの問題をどのように処理するかを尋ねたので、2つの一般的な方法があります:

  • 適切な方法:

    すべてのコードをDOCUMENT_ROOT. 基本的に、/publicフォルダがあり、そこには だけが含まれindex.php、次にinclude '../application/init.php'.

    他のすべての php ファイルは外部に配置されDOCUMENT_ROOT、直接アクセスすることはできません。

  • 愚かな方法

    それらはファイルで定数を定義しindex.php、残りのすべてのファイルは次で始まります。

      defined('SOMETHING') or die('No direct script access.');
    

    サーバー上の php 拡張機能がtits-upになると、これは明らかに失敗します。最終的に、php ソースが誰にでも見えるようになります。

ところで、この問題に対処するためにApache固有の方法を使用することはお勧めしません。フレームワークがどのWebサーバーで使用されるかがわからないためです。NginX と Lighttpd の両方が非常に人気になりつつあります。IIS も常にあります。

于 2012-07-06T16:22:40.867 に答える