0

この質問は、私がここで尋ねたものと似ています。しかし、私は同じ効果を達成したいので、それは関連しています。ユーザーがメイン ページからサイトの他のページにのみアクセスできるように制限したい。最初のページにはナビゲーション用のフレームが含まれ、次にナビゲート先のページのコンテンツ用のフレームが含まれます。コンテンツ ページにアクセスできる唯一の方法は、このメイン ページを使用することです。したがって、メイン ページがhttp://intranet/index.htmlの場合、index.html で提供されるリンクを使用しないとhttp://intranet/other_page.htmlにアクセスできません。これは可能ですか?もしそうなら、最善のテクニックは何でしょうか? 私はApacheを使用してサイトを提供しており、phpとjavascriptを利用できます。

4

2 に答える 2

4

その短い答えは - いいえ、厳密に言えば、そうではありません。

長い答えは、はい、おそらくこれの合理的な概算を考え出すことができるということですが、制限を認識する必要があります.

基本的に、HTTP はステートレスです。どのような特定のアクションが発生しても、Web サーバーは単一のリクエストを見て、/other_page.htmlそれを処理するかどうかを決定する必要があります。何らかの合理的な制限を設けるために、最初のステップは、サーバー側の状態を維持する何らかの方法が必要になることです。これがないと、other_page.html の受信リクエストを以前のリクエストと一致させることができません。幸いなことに、PHP はサーバー側セッションをネイティブでサポートしています。

(サーバー側のセッションがなければ、クライアント側のセッション cookie を使用するか、リファラー ヘッダーを調べてこれを達成しようとすることができますが、クライアントが送信する単なる文字列であり、その言葉を受け入れるため、クライアントが偽造するのは簡単です。 )。

ここで、このセッションを使用して、ユーザーが他のページに移動する前に最初のページに移動したかどうかを追跡する必要があります。最初のページが要求されたとき、および /other_page のすべての要求で、セッションに変数を設定できます。 .html の場合、この変数を提供する前に、セッションでこの変数が設定されていることを確認してください。少なくとも、現在のセッションで最初のページにアクセスしたという合理的な考えが得られます。

ただし、特定の URL を要求するためにブラウザーでどのリンクがクリックされたか、またはブラウザーが関与したかどうかさえも、まったく知る方法がありません。サーバーが見るのは、特定のリソースに対するリクエストといくつかのヘッダーだけです。これをシミュレートする方法の 1 つは、/index.htmlが配信されるときにランダムな文字列を生成し、これをクエリ パラメータとしてそのページのリンクに追加することです。次に、それをセッションに保存し、other_page が要求されたときに、要求に同じランダム文字列のクエリ パラメータが含まれていることを確認します。


しかし、この時点で、一歩下がって言う時が来ました-なぜこれをしたいのですか? なぜこれが行われるのか、正当な理由はまったく思いつきません。 これは適切なセキュリティ対策ではありません。セキュリティを適切に行う必要があり、それが動機である場合は、それを要求する必要がありました。これは、訪問者に特定のワークフローを強制する良い方法でもありません。これが良いアイデアであるかどうかは議論の余地がありますが、人々をページ B の前にページ A に強制的に移動させる方法を考える代わりに、それがあなたである理由を正確に考えてください。それを行う必要があるか、制限要因は何か、それらを達成するための最も邪魔にならない方法は何か.

忘れないでください - http://intranet/other_page.htmlは、そのページから提供しているコンテンツに対応する Uniform Resource Locator です。ある日誰かがそのアドレスを訪れて有用なリソースを目にした場合、彼らが戻ったときに再びそれを見ることを許されるべきではないのは一体なぜでしょうか? ユーザーのエクスペリエンスを故意にハンディキャップする理由を考え、サイトでインターネットの一般的な仕組みに逆らうことを強くお勧めします。

于 2010-01-06T21:13:49.930 に答える
1

Referer リクエスト ヘッダーを確認してください。ブラウザーを使用している一般ユーザーを妨害します。ただし、スプーフィングすることはできます。断固たる攻撃者をだますことはできません。

ただし、偽陽性の可能性があります。Referer が設定されていない場合があります。

于 2010-01-06T21:02:39.347 に答える