PHP 개발에서 URL 쿼리 문자열을 구축하는 것이 매우 일반적인 작업입니다. http_build_query () 는 배열을 URL 인코딩 쿼리 문자열로 빠르게 변환하는 강력한 도구입니다. 그러나 실제 응용 분야에서는 일반적으로 사용자 입력에서 매개 변수를 얻어야합니다. 이러한 입력을 안전하게 처리하기 위해 Filter_Input () 은 필수 불가결 한 기능입니다. 이 둘을 함께 사용하면 안전성을 크게 향상시키면서 효율성을 높이고 XSS 및 주입과 같은 문제를 방지 할 수 있습니다.
http_build_query ()는 배열을 가져 와서 RFC 3986 인코딩 형식을 준수하는 URL 쿼리 문자열로 변환합니다. 예를 들어:
<code> $ params = [ 'search'=> 'php', 'page'=> 2]; $ querystring = http_build_query ($ params);
// 출력 : 검색 = php & page = 2
</코드>
이 기능은 쿼리 문자열을 접합하는 데 매우 적합하며 경로와 함께 사용될 때 점프 링크를 빠르게 구성 할 수 있습니다.
<code> $ url = 'https://m66.net/search.php?' . $ QueryString; </코드>사용자 입력을 처리 할 때는 필터링되지 않은 입력이 악의적 인 컨텐츠를 수행 할 수 있으므로 $ _get 또는 $ _post를 직접 사용할 수 없습니다. Filter_Input ()은 입력 데이터를 얻고 필터하는 표준 인터페이스를 제공합니다.
<code> $ search = filter_input (input_get, 'search', filter_sanitize_string); $ page = filter_input (input_get, 'page', filter_validate_int); </코드>위의 코드에서 검색 매개 변수는 일반 텍스트로 정리되고 페이지 매개 변수는 정수로 확인됩니다.
사용자 입력을 기반으로 리디렉션 링크를 구성한다고 가정 해 봅시다. URL에서 매개 변수를 추출하고 확인하고 청소 한 다음 안전한 쿼리 문자열로 연결하기를 희망합니다. 이 시점에서 우리는 이것을 할 수 있습니다.
<code> $ params = []; $ search = Filter_Input (input_get, 'search', filter_sanitize_string);
if ($ search! == null && $ search! == false) {
$ params [ 'search'] = $ 검색;
}
$ page = filter_input (input_get, 'page', filter_validate_int);
if ($ page! == null && $ page! == false) {
$ params [ 'page'] = $ page;
}
$ querystring = http_build_query ($ params);
$ readirecturl = ' https://m66.net/results.php ?' . $ QueryString;
// 리디렉션 수행 (예 : 실제 생산 환경에서 확인하지 않고 직접 점프하지 마십시오)
헤더 ( '위치 :'. $ redirecturl);
출구;
</코드>
이런 식으로, 우리는 법적이고 안전한 매개 변수 만 URL에 스 플라이 싱되도록합니다.
사용자가 입력 한 신뢰할 수없는 콘텐츠에는 <cript> alert (1) </script> 와 같은 악의적 인 스크립트가 포함될 수 있습니다. Filter_Input () 와 Filter_Sanitize_string 및 Filter_Validate_* 시리즈를 결합하면 잠재적으로 위험한 문자를 걸러 내거나 기대치를 충족하지 않는 데이터 유형을 거부하여 이러한 공격이 발생하지 않도록 할 수 있습니다.
또한, 검증 된 매개 변수 만 http_build_query () 로 전달함으로써 주입 위험이 추가로 줄어 듭니다.
쿼리 문자열을 구성하기 위해 http_build_query ()를 사용하는 것이 편리하지만, 매개 변수가 완전히 확인 되었으나야합니다. Filter_Input () 과 결합하면 코드 품질을 향상시킬뿐만 아니라 웹 응용 프로그램의 보안을 효과적으로 향상시킬 수 있습니다. 특히 링크를 생성하기 위해 사용자 입력을 스플 라이스해야 할 경우이 조합 방법은 개발자에게 표준 관행이되어야합니다.