0

タイトルが示すように、訪問者が特定の URL から来ていない場合、ページのコンテンツを表示できないようにしたいと考えています。どうすればこれを達成できますか?私はNginxの上にPHPを持っています。PHP と Nginx のどちらを使用した方が良いでしょうか?

HTTP_REFERERブラウザには必須ではないため、使用は最良のアイデアではないことを読みました...どうしますか(コード例)?

4

5 に答える 5

3

おそらく完璧ではありませんが、最初のページに $_SESSION を設定し、リンクされたページでそれを確認して削除します。

$_SESSION['allow'] = 'yes';

それでは次のページへ

if(isset($_SESSION['allow']) && $_SESSION['allow'] == 'yes') {
    $_SESSION['allow'] = 'now viewing';
}

とか、そういうことか……。

于 2012-11-19T19:42:39.290 に答える
3

最も確実な解決策は、あるページから次のページへと推測するのが簡単ではない _GET パラメーターを、a-la の一意のトークンとして渡すことです。

ただし、これは最も単純なソリューションではなく、実装するのもはるかに簡単ではないため、正しく実装するには非常に多くの労力が必要です。

複雑さの順に、最も単純なものを上にして、代替案は次のとおりです。

  • リファラー
  • 固定 GET パラメータの使用
  • ユーザーの最初のページに配置される Cookie。Cookie を受け入れない訪問者には機能しません。また、EU で働いている場合は Cookie ポリシーが必要になります。
  • nonce を GET パラメータとして使用する

最後の解決策の詳細

最初のページで 1 回限りの文字列が生成され、すべてのリンクに追加されます。次に、この文字列がデータベース/フラット ファイルのエントリと一致するかどうかを確認し、一致する場合はアクセスを許可します。そうでない場合は、アクセスを拒否します。次に、ユーザーがページを再度通過する必要があるように、トークンを無効にします。

于 2012-11-19T19:42:46.327 に答える
1

ページへのアクセスを制限する唯一の方法は、誰かの資格情報を使用することです。なりすましの可能性があるため、ユーザーがどこから来たかを検出する信頼できる方法はありません。

したがって、ユーザーがページ A から来たばかりの場合にのみページ B へのアクセスを許可する方法はありません (信頼できない方法で許可しない限り)。HTTP_REFERER

ページ A に Cookie (またはセッション変数) を設定し、ユーザーが Cookie (セッション変数) を設定していない限りページ B を表示しないこともできますが、ユーザーがページ A からページ B に直接移動する必要はありません。

于 2012-11-19T19:42:14.987 に答える
1

簡単な方法は、最初のページで 1 回限りのセッション変数を設定し、2 番目のページでその変数を読み取ることです。

たとえば、ページ 1:

$_SESSION['viewed_page1'] = true;

ページ2:

if(!$_SESSION['viewed_page1']){
  echo 'You need to visit page 1 first!';
}

.

于 2012-11-19T19:43:17.290 に答える
0

セッション変数を使用して、あるページから特定の「キー」を渡し、それを表示するために次のページでそれを要求することができます。

ここでセッションに関する情報を見つけることができます

于 2012-11-19T19:42:45.933 に答える