2009-01-09 2 views
18

PHP로 누가 웹 사이트를 방문하는지 확인할 수 있습니까? 특정 웹 사이트에서 들어오는 사용자 만 허용해야하는 웹 응용 프로그램 (PHP로 작성)이 있습니다. _Request 개체를 검토하여 추천 웹 사이트를 얻을 수 있습니까? 그렇다면 어떻게?PHP의 리퍼러 검사

답변

29

예, 일부 프록시 및 기타 정보는이 정보를 제외하고 쉽게 위조 될 수 있습니다. 그래서 그것에 의존하지 마십시오. 예를 들어 자신의 서버와 일치하도록 리퍼러를 확인하기 때문에 웹 응용 프로그램이 CSRF에서 안전하다고 생각하지 마십시오.

$referringSite = $_SERVER['HTTP_REFERER']; // is that spelt wrong in PHP ? 

특정 도메인의 요청 만 허용하려면 일부 URL을 구문 분석하여 최상위 도메인을 가져와야합니다. 더 많은 것을 배웠으므로 PHP의 parse_url()으로이 작업을 수행 할 수 있습니다.

andyk은 의견에서 지적했듯이 www.example.com 및 example.com도 허용해야합니다.

+0

은 대부분 동일한 경우이므로 www.example.com과 example.com을 모두 허용해야 할 수도 있으므로주의해야 할 수도 있습니다. HTTP_REFERER가 실제로 신뢰할 수 없다는 것은 말할 필요도 없습니다. – andyk

+1

php 매뉴얼에서 "이것은 사용자 에이전트에 의해 설정됩니다. 모든 사용자 에이전트가 이것을 설정할 수있는 것은 아니며 일부는 HTTP_REFERER를 기능으로 수정할 수있는 기능을 제공합니다. 즉, 실제로 신뢰할 수는 없습니다." – andyk

+0

네, 믿을 수 없다는 걸 압니다. – alex

0

'HTTP_REFERER'키는 $ _SERVER 배열을 검사해야합니다.

6

참조 사이트를 얻으려면 $_SERVER['HTTP_REFERER']을 볼 수 있지만 팜에 내기하지 마십시오. 브라우저가이 헤더를 설정하면 쉽게 스푸핑됩니다.

특정 참조 자의 사람들 만 사이트를 보는 것이 중요 할 경우이 방법을 사용하지 마십시오. 콘텐츠를 보호하려면 기본 인증과 같은 다른 방법을 찾아야합니다. 나는이 기술을 사용하면 안된다는 말은 아니며 단지 바보가 아니라는 것을 명심하십시오.

여기를 클릭하여 참조 수준을 using mod_rewrite으로 차단할 수도 있습니다.

4

리퍼러를 신뢰할 수 없습니다. $_SERVER 어레이에서 왔음에도 불구하고 실제로는 사용자/브라우저가 제공 한 값이며 Firefox RefControl addon과 같은 것을 사용하여 쉽게 위조됩니다.

+0

예 FF가 아닙니다. 그것을지지한다. 나는 대안을 찾고있다. – BenRacicot