0

私のWebサイトの1つで、$_SERVER['REQUEST_URI']未登録のユーザーがページのコンテンツを表示できるかどうかを確認するために使用しています。

マニュアルには以下について書かれてい$_SERVER['REQUEST_URI']ます:

このページにアクセスするために指定されたURI。たとえば、「/index.html」。

私の質問は、クライアントがアクセスできるクライアント側の方法であるかどうかです。$_SERVER['REQUEST_URI']異なる値が含まれていてもindex.php ?

クライアントが尋ねたページが含まれていて、サーバーが戻ってくることは知って$_SERVER['REQUEST_URI']いますが、この種の質問を時々自分自身に聞かないと、私は満足しません。

$_SERVER['REQUEST_URI']また、このように使用することは良い習慣と考えられていますか?

編集:一般的すぎるため、使用するスクリプトを含めました

list($c_page) = explode('.',substr($_SERVER['REQUEST_URI'],1));
define('C_PAGE',$c_page ?: 'index');
define('LOGGED',$_SESSION['user']['id'] ?: 0);
if(in_array(C_PAGE,array('page_1','page_2','page_3')) && !LOGGED){ header('Location: login.html'); exit; }
4

3 に答える 3

1

あなたは本当にセッション変数(またはクッキー)で彼らの入り口を追跡するべきです。これらのいずれかがブロックされる可能性があります...しかし、それらは「絶対確実」に近いです。とはいえ、何でも偽造することができます...したがって、セキュリティが最も重要な場合は、組み合わせや強力な一意の文字列を使用してください。

于 2012-11-15T09:11:34.933 に答える
0

個人的には、ファイルにアクセスする必要があるユーザーの1つ以上のグループ(クラス)を宣言し、ログインしたユーザーがそれらのグループのいずれにも属していない場合に401エラーを返すページを含める方が信頼性が高いと思います。例えば

session_start();
...
$access = 'admin';
include 'inc/guard.php';

あなたの場合、「public」と「logged-in」が必要なように聞こえますが、これは少し異なりますが、私のガードスクリプトでもカバーされているケースです。そこで、$_SESSION変数が空であることを確認するだけです(ログイン時に変数に何かを挿入します)。

if($access != 'public' && empty($_SESSION)) {
    header('HTTP/1.1 401 Unauthorized', true);
    include 'inc/login.php';
    exit;
}
于 2012-11-15T09:07:52.257 に答える
0

使用するサーバー側のソフトウェアスタックに応じて、この変数はWebサーバーまたはfastcgiラッパーによって設定されます。

ハードウェア/ソフトウェアスタック内のURLの書き換えと不透明なプロキシは、スクリプト内に表示される値に影響を与える可能性があります。

たとえば、NginxはURLを/test.htmlから/index.php?action=testに書き換えて、それをWebサーバーに渡すことができます。アプリケーションが/index.php?action=testを認識している間に、ユーザーは/test.htmlを呼び出します。

結論:REQUEST_URIはWebサーバーに渡されるURIであり、URLベースのアクセス制御の参照として使用できます。

編集:

他の応答を見たので、混乱を避けるために...

私が理解したあなたの質問:あなたは、現在要求していて、すでにパスワードを許可されているユーザーが特定のURLにアクセスするのに十分な権限を持っているかどうかを確認したいと思います。繰り返しますが、はい、リクエストURIを参照値として使用できます

于 2012-11-15T09:14:13.777 に答える