현재 페이지를 보냈거나 호출 한 (AJAX를 통해) 페이지를 결정하는 가장 안정적이고 안전한 방법은 무엇입니까? $_SERVER['HTTP_REFERER']
안정성이 부족하기 때문에 를 사용하고 싶지 않으며 내 사이트에서 발생한 요청에서만 호출되는 페이지가 필요합니다.
편집 : 일련의 작업을 수행하는 스크립트가 내 웹 사이트의 페이지에서 호출되는지 확인하려고합니다.
현재 페이지를 보냈거나 호출 한 (AJAX를 통해) 페이지를 결정하는 가장 안정적이고 안전한 방법은 무엇입니까? $_SERVER['HTTP_REFERER']
안정성이 부족하기 때문에 를 사용하고 싶지 않으며 내 사이트에서 발생한 요청에서만 호출되는 페이지가 필요합니다.
편집 : 일련의 작업을 수행하는 스크립트가 내 웹 사이트의 페이지에서 호출되는지 확인하려고합니다.
답변:
REFERER는 HTTP 프로토콜의 일부로 클라이언트 브라우저에 의해 전송되므로 실제로 신뢰할 수 없습니다. 거기에 없을 수도 있고, 위조되었을 수도 있고, 보안상의 이유라면 믿을 수 없을 수도 있습니다.
요청이 사이트에서 오는지 확인하려면 할 수 없지만 사용자가 사이트를 방문했는지 및 / 또는 인증되었는지 확인할 수 있습니다. 쿠키는 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;