2012-01-08 5 views
1

ユーザーが自分のサーバー上で実行されている特定のスクリプトにアクセスすることを不可能にしたいと考えています。この例では、ユーザーがresults.phpに直接アクセスできないようにします。

これを説明できる最も良い方法は、ウェブサイトのルートレベルがどのように機能するかを簡単に説明することです。

ROOTは4つのスクリプトが含まれています

のindex.php home.php error.php results.php

インデックスファイルには、私が含まれているとの、これら3つのファイルにユーザーを向けます特定の例。

新しいスクリプトが含まれ、ユーザーの視点が新しい「Webページ」に変更される前に、インデックスファイルに必要なコントローラと追加のスクリプトが含まれているため、これで少し問題が発生します。これは、ページの読み込み時間が非常に短くなったため、ユーザーにとって非常に迅速な経験を提供するため、これを行っています。

これらのファイルは、ロボットがインデックスを持たないメタデータで設定されており、サイトマップから削除されています。私はさらに一歩進んで、ユーザーがこれらのスクリプトに直接アクセスすることを不可能にしたいと思っています。http://www.mysite.com/results.php

これがそうであれば、レイアウトを持たない醜い非偶発的なページで挨拶されるからです変数、またはメインCSSスタイルシートが定義されています。

<?php 
ob_start(); 

$activeHome = 'active'; 

require_once $_SERVER['DOCUMENT_ROOT'] . '/../../includes/config.php'; 
require_once($docRoot . '/includes/layout.php'); 

... 

include 'home.php'; 
?> 

このスクリプトは、3つの他のスクリプトを設定する任意のコードが含まれています。ここでは

はindex.phpをの簡単な概要です。ここ

if (isset($_GET['register'])) 
{ 
header('Location: http://www.mysite.com/register/'); 
exit(); 
} 

そして、ホーム/結果/ error.phpに同じpageDetailsとpageContentを除き、これらのスクリプトで

<?php 

.... 

echo $head1 . $pageDetails . $head2 . $header . $pageContent . $footer; 
exit; 
?> 

variblesの全てであるととともに、レイアウトスクリプトで定義されていますメインのCSSファイル。

このWebサイトの設定でわかるように、これらのページをphp関数で制限する場合を除き、あまり多くのオプションが残っていません。私はグローバル変数やセッション変数を多用する必要があると考えていますが、これは私が大切にしていることではありません。より簡単な方法は、htaccessファイルでこれを行うことだと思います。しかし、私はhtaccessコマンドに関してはそれほど知識がありません。そして、もしこれがそのルートに行くことさえ可能であれば、私は確信していません。

このようなことについてもう少し知識があれば誰でも意見や提案を提供したいと思いますか?

答えて

3

2つの選択肢があります。

1. Webルート以外のファイルを移動します。 - これは理にかなっています。ファイルがWebサーバからアクセスされることを意図していない場合、Webルートの外にあるはずです。これは、あなた(そしてWebサーバーのユーザーとグループ)があなたのPHPスクリプトを含むディレクトリにアクセスできる限り、望ましい方法です。 Apache固有の(またはmod_rewrite固有の).htaccess規則が不要なので、これはさらに望ましいことです。これは他のほとんどのサーバーのフレーバに移植可能にするためです。サンプルのディレクトリ構造のかもしれないが、次のようになります

/ 
    /www 
     /index.php 
    /includes 
     /home.php 
     /error.php 
     /results.php 

ジャスト(ほとんどのApacheの構成はにあなたをのみを許可するウェブサーバのユーザは、WWWへのアクセス権を持っており、含まれており、Webサーバの設定は、あなたのWebルートの外で働くことを可能にすることを確認してくださいそれの中で働く)。

2.アクセスできないhtaccessルールを追加する - あまり好ましくありません。あなたが頑固になりたい場合や、Webルートにファイルを保存する正当な理由がある場合は、これがApache上で行う方法になります。

RewriteEngine On 
RewriteRule ^(home.php|error.php|results.php)$ - [L] 

/register/register.phpユーザーがアクセスできないようにするには:

私が見
RewriteEngine On 
RewriteRule ^register/register.php$ - [L] 
+0

htaccess経由で 'http:// www.mysite.com/register/register.php'にあるファイルへのアクセスを拒否したいのですが? –

+1

@BlackberryFan Explained! –

+1

@BlackberryFan /register/register.phpを含むように更新されました –

1

ファイルが別のスクリプトからのみアクセスされ、HTTP経由では直接アクセスされない場合は、HTTPサーバーのルートディレクトリの下に置かないでください。

+0

以上の3があるので、私は、それが解決策が、複雑なものであろうと思います私に迷惑をかけているスクリプト...約23です。 –

+0

私はこれが本当に私のために先見の欠如に沸騰すると思う、これは最も論理的な結論です。 –

関連する問題