programing

PHP에서 리퍼러 결정

nasanasas 2020. 8. 18. 07:46
반응형

PHP에서 리퍼러 결정


현재 페이지를 보냈거나 호출 한 (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

모든 보안 페이지에 대해 이와 동일한 작업을 수행하는 보안 사이트를 알고 있습니다.


사용 $ _SERVER [ 'HTTP_REFERER를']

사용자 에이전트를 현재 페이지로 연결 한 페이지 (있는 경우)의 주소입니다. 이것은 사용자 에이전트에 의해 설정됩니다. 모든 사용자 에이전트가이를 설정하는 것은 아니며 일부는 HTTP_REFERER를 기능으로 수정하는 기능을 제공합니다. 요컨대, 정말 신뢰할 수 없습니다.

if (!empty($_SERVER['HTTP_REFERER'])) {
    header("Location: " . $_SERVER['HTTP_REFERER']);
} else {
    header("Location: index.php");
}
exit;

이를 확인할 수있는 신뢰할 수있는 방법이 없습니다. 그것이 어디에서 왔는지 알려주는 것은 정말로 고객의 손에 달려 있습니다. 웹 사이트의 일부 페이지에만있는 쿠키 또는 세션 정보를 사용한다고 상상할 수 있지만 그렇게하면 북마크에 대한 사용자 경험이 깨질 수 있습니다.


모든 가짜 리퍼러 문제를 읽은 후 남은 옵션은 하나뿐입니다. 즉, 리퍼러로 추적하려는 페이지는 세션에 유지되어야하며, 리퍼러 페이지 값이있는 경우 세션을 확인하고 다른 방법으로 작업을 수행하는 ajax로 호출해야합니다. 동작.

반면에 다른 페이지를 요청하는 동안 리퍼러 세션 값을 null로 만듭니다.

세션 변수는 욕구 페이지 요청에만 설정됩니다.

참고 URL : https://stackoverflow.com/questions/165975/determining-referer-in-php

반응형