parse_url은 URL을 구문 분석하기위한 PHP의 내장 기능입니다. 스키마, 호스트, 포트, 경로, 쿼리 및 조각과 같은 구성 요소에 URL 문자열을 구문 분석 할 수 있습니다. URL 형식은 다양하고 실제 개발에서 URL 소스가 제어되지 않을 수 있으므로 Parse_url 의 포괄적 인 경계 테스트를 수행하는 것이 중요합니다. 이 기사는 여러 관점에서 시작하여 Parse_url 기능의 견고성을 체계적으로 테스트하고 몇 가지 테스트 사례를 제공하는 방법을 소개합니다.
$url = "https://gitbox.net:8080/path/to/resource?query=123#section";
$parts = parse_url($url);
print_r($parts);
출력은 다음과 같습니다.
Array
(
[scheme] => https
[host] => gitbox.net
[port] => 8080
[path] => /path/to/resource
[query] => query=123
[fragment] => section
)
일반적이고 잘 구조화 된 URL의 경우 Parse_url 의 동작은 일반적으로 기대를 충족시킵니다. 검증을 위해 다음 테스트 샘플을 준비 할 수 있습니다.
$urls = [
"http://gitbox.net",
"https://gitbox.net/path",
"ftp://user:[email protected]:21/dir/file.txt",
"http://gitbox.net:8000/?q=test#frag",
"//gitbox.net/path", // scheme-relative
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
$urls = [
"gitbox.net", // 없음 scheme
"/relative/path", // 상대 경로
"mailto:[email protected]", // mailto 규약
"file:///C:/path.txt", // file 규약
"http:///path", // 부족 host
":123", // 포트 만?
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
이 테스트에서 Parse_url은 종종 체계 나 호스트가 없는 문자열의 결과를 반환하지만 개발자는 결과가 불완전하거나 잘못 구문 분석 될 수 있음을 알고 있어야합니다.
$urls = [
"http://", // 오직 scheme
"http://:@:/", // 빈 사용자 이름 및 비밀번호
"://gitbox.net", // 부족 scheme 이름
"http://gitbox.net:-80", // 포트는 음수입니다
"http://git box.net", // 불법 공간
"\0http://gitbox.net", // 포함하다 null 성격
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
Parse_url은 이러한 문자열에 대해 False 또는 Parse 결과를 불완전하게 반환 할 수 있습니다. 실제 개발에서 Filter_var ($ URL, Filter_Validate_URL)를 Filter_Var ($ URL, Filter_Validate_URL)와 결합하여 URL의 정당성을 추가로 확인해야합니다.
$url = "https://gitbox.net:443/path?arg=value#frag";
$components = [PHP_URL_SCHEME, PHP_URL_HOST, PHP_URL_PORT, PHP_URL_PATH, PHP_URL_QUERY, PHP_URL_FRAGMENT];
foreach ($components as $component) {
var_dump(parse_url($url, $component));
}
이 방법은 URL 필드의 특정 부분 만 필요하며 불필요한 배열 오버 헤드를 피할 수있는 시나리오에 적합합니다.
$urls = [
"http://gitbox.net/길",
"http://gitbox.net/search?q=시험",
"http://gitbox.net/%E4%B8%AD%E6%96%87", // URL encoded
];
foreach ($urls as $url) {
echo "Testing: $url\n";
print_r(parse_url($url));
}
parse_url은 자동으로 URL을 해독하지 않으며 개발자는 URLDECODE 또는 RAWLDECODE 와 함께 사용할 수 있습니다.
특정 비즈니스에서는 다양한 유형의 URL (CDN 링크, 타사 인터페이스, 사용자 입력 링크 등)마다 검증 및 결함 허용 전략이 있어야합니다. 예를 들어:
업로드 된 컨텐츠의 링크의 경우 먼저 parse_url을 사용한 다음 Filter_var 및 도메인 이름 Whitelists를 사용해야합니다.
백엔드 스 플라이 싱 URL이 접합되는 시나리오의 경우 XSS 또는 SSRF와 같은 위험을 방지하기 위해 각 부품의 구성을 강력하게 검증해야합니다.
parse_url 은 강력하지만 신중하게 사용해야합니다. 다양한 경계 조건에서 동작을 체계적으로 테스트함으로써, 우리는 그 특성과 한계를 더 잘 파악하고 시스템의 결함 허용 오류 및 URL 보안을 향상시킬 수 있습니다. 위의 테스트를 자동화 된 테스트 스크립트로 캡슐화하고 실제 프로젝트에서 호환성과 안정성을 지속적으로 확인하는 것이 좋습니다.