jQuery を使用して別のページ内に読み込まれるページがあります。私が知りたかったのは、別のページ内に読み込まれるそのページへの直接アクセスを何らかの方法でブロックできるかどうかです。
3 に答える
get/post または Cookie に魔法の値を追加してみてください。次に、ページの先頭でその値を確認し、欠落している場合はエラー ページを返します。
ただし、一部のユーザーが正確にそれを行うことを妨げるものではありません。Firebug などでリクエストをデバッグすると、そのマジック ナンバーを使用してリクエストを複製できます。
他の人が言っているように、Ajaxリクエストは適切なヘッダーを作成することでエミュレートできます。リクエストがAjaxリクエストであるかどうかを確認するための基本的なチェックが必要な場合は、次を使用できます。
if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') { //Request identified as ajax request }
ただし、このチェックに基づいてセキュリティを設定しないでください。それが必要な場合は、ページへの直接アクセスを排除します。
JeremyRutenによるこの回答も考慮に入れてください。
彼らがAJAXを介してそれにアクセスしていることを保証する方法はありません。直接アクセスとAJAXアクセスはどちらもクライアントから送信されるため、簡単に偽造できます。
なぜとにかくこれをしたいのですか?
PHPコードがあまり安全でないことが原因である場合は、PHPコードをより安全にします。(たとえば、AJAXがユーザーIDをPHPファイルに渡す場合は、PHPファイルにコードを記述して、それが正しいユーザーIDであることを確認します。)
上にリンクされた議論のより賢い考え。
それを 100% ブロックすることはできません -- jQuery からのリクエストは通常のブラウザ リクエストであるため、できることは外部リンクとカジュアル アクセスを防ぐことだけです (わざわざ HTTP リクエストを完全に複製しようとしても、ページ; それを回避する方法はありません)。
HTTP「リファラー」ヘッダーをチェックし、参照ページが自分のものであることを確認することで、外部リンクを停止できます。
また、ヘッダー「X-Requested-With」をチェックすることで、特定のリクエストが jQuery とブラウザーから来ているかどうかを確認することもできます。jQuery はこのヘッダーを追加し、値「XMLHttpRequest」を設定します。通常のブラウザ リクエストにはそのヘッダーがありません。
また、Cookie、リクエストの一部である必要がある期限切れのトークンなどを使用して検証システムをセットアップすることもできます。 HTTP ヘッダー フィルタリングにより、トークンを把握することもできます。