문제

현재 페이지 인 AJAX를 통해 (AJAX를 통해) 보낸 페이지를 결정하는 가장 신뢰할 수 있고 안전한 방법은 무엇입니까? 나는 사용하고 싶지 않다 $_SERVER['HTTP_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로 만듭니다.

세션 변수는 욕망 페이지 요청에만 설정되어 있음을 기억하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top