現在のページを送信または(AJAX経由で)呼び出したページを判別する最も信頼性が高く安全な方法は何ですか。$_SERVER['HTTP_REFERER']
信頼性が欠如しているため、を使用したくありません。また、自分のサイトで発生したリクエストからのみページが呼び出されるようにする必要があります。
編集:一連のアクションを実行するスクリプトが、私のWebサイトのページから呼び出されていることを確認したいと考えています。
現在のページを送信または(AJAX経由で)呼び出したページを判別する最も信頼性が高く安全な方法は何ですか。$_SERVER['HTTP_REFERER']
信頼性が欠如しているため、を使用したくありません。また、自分のサイトで発生したリクエストからのみページが呼び出されるようにする必要があります。
編集:一連のアクションを実行するスクリプトが、私のWebサイトのページから呼び出されていることを確認したいと考えています。
回答:
REFERERは、HTTPプロトコルの一部としてクライアントのブラウザから送信されるため、実際には信頼できません。それはそこにないかもしれません、それは偽造されるかもしれません、それはそれがセキュリティ上の理由であるならばそれを信用することはできません。
リクエストがサイトからのものかどうかを確認したい場合はできませんが、ユーザーがサイトにアクセスしたか、認証されているかを確認できます。CookieはAJAXリクエストで送信されるので、信頼できます。
私が最も見つけたのはCSRFトークンであり、リファラーを検証する必要があるリンクのセッションに保存します。
したがって、FBコールバックを生成している場合は、次のようになります。
$token = uniqid(mt_rand(), TRUE);
$_SESSION['token'] = $token;
$url = "http://example.com/index.php?token={$token}";
その後、index.phpは次のようになります。
if(empty($_GET['token']) || $_GET['token'] !== $_SESSION['token'])
{
show_404();
}
//Continue with the rest of code
私は、すべての安全なページに対してこれと同等のことを行う安全なサイトを知っています。
$_GET['token'] == $_SESSION['token']
と確信してい$_GET['token'] !== $_SESSION['token']
ますか?
使用して$ _SERVER [ 'HTTP_REFERER']を
ユーザーエージェントを現在のページに参照させたページ(存在する場合)のアドレス。これはユーザーエージェントによって設定されます。すべてのユーザーエージェントがこれを設定するわけではありません。一部のユーザーエージェントは、HTTP_REFERERを機能として変更する機能を提供します。つまり、本当に信頼することはできません。
if (!empty($_SERVER['HTTP_REFERER'])) {
header("Location: " . $_SERVER['HTTP_REFERER']);
} else {
header("Location: index.php");
}
exit;