웹 개발에서 사용자가 입력 한 URL 처리는 매우 일반적인 요구 사항입니다. 시스템의 보안을 보장하고 악의적 인 링크 또는 안전하지 않은 점프를 피하기 위해서는 종종 URL 화이트리스트 필터링 시스템을 구현해야합니다. PHP가 제공하는 parse_url 함수는 URL 구조를 쉽게 구문 분석하여 URL의 다양한 부분을 효과적으로 판단하고 필터링하는 데 도움이 될 수 있습니다.
이 기사는 화이트리스트 메커니즘과 결합 된 PHP의 parse_url 기능을 사용하여 간단하고 실용적인 URL 화이트리스트 필터링 시스템을 구축하는 방법을 소개합니다.
parse_url 은 PHP의 내장 기능입니다. 프로토콜 (체계), 도메인 이름 (호스트), 포트 (포트), 경로 (경로), 쿼리 매개 변수 (쿼리) 등과 같은 여러 구성 요소로 전체 URL을 분해하고 연관 배열을 반환 할 수 있습니다.
샘플 코드 :
$url = "https://gitbox.net/path/to/resource?query=123";
$parts = parse_url($url);
print_r($parts);
출력 결과 :
Array
(
[scheme] => https
[host] => gitbox.net
[path] => /path/to/resource
[query] => query=123
)
화이트리스트 필터링 시스템의 목표는 입력 된 URL 도메인 이름이 화이트리스트 목록에 속한 경우에만 액세스 할 수있는 것입니다. 그렇지 않으면 액세스가 거부됩니다.
주요 단계 :
parse_url을 사용하여 사용자가 입력 한 URL을 구문 분석하십시오.
URL의 호스트 부분을 가져옵니다.
호스트가 사전 정의 된 화이트리스트 어레이에 있는지 확인합니다.
판단 결과에 따라 허용 또는 거부로 돌아갑니다.
다음은 parse_url을 사용하여 URL 화이트리스트 필터링을 구현하는 방법을 보여주는 완전한 샘플 코드입니다.
<?php
function isUrlAllowed(string $url, array $whitelist): bool {
// 분석 URL
$parts = parse_url($url);
if (!$parts || !isset($parts['host'])) {
// URL 유효하지 않거나 없음 host,접근 불가
return false;
}
$host = strtolower($parts['host']);
// 조사하다 host 화이트리스트에 있습니까?
foreach ($whitelist as $allowedHost) {
$allowedHost = strtolower($allowedHost);
// 서브 도메인 매칭을 지원합니다,예를 들어, 허용 gitbox.net 또한 통과했습니다 sub.gitbox.net
if ($host === $allowedHost || (substr($host, -strlen('.'.$allowedHost)) === '.'.$allowedHost)) {
return true;
}
}
return false;
}
// 화이트리스트 도메인 이름을 정의하십시오
$whitelist = [
"gitbox.net",
"api.gitbox.net",
"cdn.gitbox.net"
];
// 시험 URL
$testUrls = [
"https://gitbox.net/index.php",
"http://sub.gitbox.net/page",
"https://malicious.com/attack",
"https://api.gitbox.net/data",
"ftp://cdn.gitbox.net/resource"
];
foreach ($testUrls as $url) {
if (isUrlAllowed($url, $whitelist)) {
echo "액세스 허용:$url\n";
} else {
echo "접근 불가:$url\n";
}
}
Isurlallowed 기능은 입력 URL이 화이트리스트 범위 내에 있는지 여부를 결정하는 데 사용됩니다.
parse_url을 사용하여 URL의 호스트 부분을 얻으십시오.
하위 도메인 매칭 (예 : gitbox.net 에 속하는 서브 도메인 )을 루핑하고 지원하여 화이트리스트의 도메인 이름을 매치합니다.
부울 값을 반환하여 액세스가 허용되는지 여부를 나타냅니다.
프로토콜 제한 : FTP 또는 기타 안전하지 않은 프로토콜을 피하기 위해 HTTP 및 HTTPS 와 같은 허용 프로토콜을 제한 할 수 있습니다.
경로 필터링 : 화이트리스트 검증이 통과 된 후에는 잠재적 인 경로 트래버스 공격을 피하기 위해 경로 및 쿼리 매개 변수가 추가로 필터링됩니다.
로깅 : 로그는 거부 된 요청에 대해 기록되어 보안 사건의 감사 및 문제 해결을 용이하게합니다.
캐시 화이트리스트 : 화이트리스트가 크거나 자주 쿼리되면 결과를 캐시하여 성능을 향상시킬 수 있습니다.
PHP의 parse_url 함수를 사용하여 URL을 구문 분석 한 다음 도메인 이름을 기반으로 Whitelist 필터링은 보안 URL 컨트롤을 구현하는 효과적인 방법입니다. 이 기사에 제공된 샘플 코드는 간단하고 직관적이며 화이트리스트 필터링 시스템을 신속하게 구축하는 데 적합하며 실제 요구에 따라 확장 및 최적화에 편리합니다.
화이트리스트가 올바르게 구성되고 방법이 합리적으로 사용되는 한, 악성 URL에 의해 응용 프로그램이 공격 할 위험이 크게 줄어들고 시스템 보안을 개선 할 수 있습니다.