점프 소스는 일반적으로 사용자가 현재 페이지에 액세스하기 전에 페이지 URL을 포함하는 HTTP 요청 헤더의 참조 필드를 통과합니다. 예를 들어, 사용자가 웹 사이트 A에서 웹 사이트 B로 링크를 클릭하면 웹 사이트 B의 서버 측은 웹 사이트 a ~ $ _server [ 'http_referer'] 의 URL을 읽을 수 있습니다.
그러나 주목하는 것이 중요합니다.
대상자는 반드시 전송되지 않으며 일부 브라우저 나 플러그인이 비활성화 될 수 있습니다.
참조자는 위조 될 수 있으므로 완전히 신뢰할 수 없습니다.
parse_url 함수는 URL을 구성 요소 (프로토콜), 호스트 (도메인 이름), 경로 (PATH) 등과 같은 구성 요소로 분해 할 수 있습니다. 반환 결과는 URL의 다른 부분을 판단 할 수있는 연관 배열입니다.
$url = "https://gitbox.net/path/to/page?query=123";
$parsed = parse_url($url);
print_r($parsed);
산출:
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/page
[query] => query=123
)
다음 예제는 PHP를 사용하여 점프 소스를 감지 하고 지정된 도메인 이름 (예 : gitbox.net )에서 오는지 여부를 결정하는 방법을 보여줍니다.
<?php
// 얻다 HTTP_REFERER
$referer = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '';
if (empty($referer)) {
echo "소스 정보가 없습니다,직접 액세스 또는 브라우저가 비활성화 될 수 있습니다 Referer。";
exit;
}
// 소스를 분석하십시오 URL
$parsedUrl = parse_url($referer);
// 포함 여부를 결정하십시오 host
if (!isset($parsedUrl['host'])) {
echo "원천 URL 잘못된 형식。";
exit;
}
// 指定允许的원천域名
$allowedDomains = ['gitbox.net'];
// 判断원천是否在允许列表中
if (in_array($parsedUrl['host'], $allowedDomains)) {
echo "访问원천于可信域名:" . htmlspecialchars($parsedUrl['host']);
// 여기에서 후속 논리적 처리를 수행 할 수 있습니다,액세스 또는 로깅이 허용되는 경우
} else {
echo "访问원천不可信,원천域名:" . htmlspecialchars($parsedUrl['host']);
// 점프에 사용할 수 있습니다、액세스 거부, 등
}
?>
안전 고려 사항 <br> 보안 판단을 위해 전적으로 의지 할 수는 없습니다. 로그인 확인, 토큰 확인 등과 같은 다른 수단과 협력하는 것이 좋습니다.
다중 도메인 이름 지원
$ allendomains 배열은 여러 도메인 이름을 추가하고 여러 신뢰할 수있는 소스를 지원할 수 있습니다.
성능 최적화
parse_url은 처리하기 간단하고 성능 오버 헤드가 낮으며 고주파 호출에 적합합니다.
PHP의 parse_url 기능을 사용하면 점프 링크의 소스 URL을 쉽게 구문 분석하고 점프 소스의 감지 및 필터링을 실현할 수 있습니다. HTTP 요청 헤더의 참조 와 함께 개발자는 액세스 권한 및 사용자 행동 분석을보다 유연하게 관리 할 수 있습니다.
실제 프로젝트에서는 웹 사이트 보안 및 사용자 경험을 향상시키기 위해 비즈니스 요구 사항을 기반으로 소스에 대해보다 세분화 된 판단을 내릴 수도 있습니다.