Computer >> 컴퓨터 >  >> 프로그래밍 >> PHP

PHP $_GET 변수 완벽 정리 – URL 쿼리 스트링 데이터 다루기

PHP $_GET이란 무엇인가?

$_GET은 HTTP 요청의 URL 뒤에 붙는 쿼리 스트링(query string)을 통해 현재 스크립트로 전달된 변수들을 담고 있는 연관 배열(associative array)입니다. 주의할 점은 이 배열이 GET 방식 요청뿐만 아니라, 쿼리 스트링을 포함하는 모든 종류의 HTTP 요청에 대해서도 값이 채워진다는 것입니다.

과거에는 $HTTP_GET_VARS라는 변수에 동일한 정보가 담겼지만, 이 변수는 이미 폐기(deprecated)되었으므로 더 이상 사용하지 않는 것이 좋습니다.

$_GET의 동작 원리

기본적으로 클라이언트(브라우저)는 서버에 URL을 요청할 때 HTTP GET 메서드를 사용합니다. URL 뒤에 붙는 쿼리 스트링은 & 기호로 연결된 여러 개의 key=value 쌍으로 구성될 수 있으며, $_GET 연관 배열은 이러한 키-값 쌍들을 저장합니다.

예를 들어, 브라우저의 URL이 다음과 같다고 가정해 보겠습니다.

https://localhost/testscript.php?name=xyz&age=20

이 경우 $_GET 배열에는 'name'과 'age'라는 두 개의 키가 저장되며, 각각 'xyz'와 '20'이라는 값을 가지게 됩니다.

기본 사용 예제

<?php
echo "Name : " . $_GET["name"] . "<br>";
echo "Age : " . $_GET["age"];
?>

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

Name : xyz
Age : 20

보안을 위한 htmlspecialchars() 함수 활용

사용자 입력값을 그대로 출력하면 XSS(크로스 사이트 스크립팅) 공격에 노출될 수 있습니다. 따라서 htmlspecialchars() 함수를 사용하여 특수 문자를 HTML 엔티티(entity)로 변환하는 것이 안전합니다.

이 함수가 변환하는 주요 문자들은 다음과 같습니다.

문자변환 결과
< (작음 기호)&lt;
' (작은따옴표)&#039; 또는 &apos;
" (큰따옴표)&quot;
& (앰퍼샌드)&amp;
> (큼 기호)&gt;

마찬가지로 브라우저의 URL이 https://localhost/testscript.php?name=xyz&age=20라고 가정해 보겠습니다.

htmlspecialchars() 적용 예제

<?php
echo "Name: " . htmlspecialchars($_GET["name"]) . "<br>";
echo "Age: " . htmlspecialchars($_GET["age"]) . "<br>";
?>

실행 결과

위 코드 역시 동일하게 다음 결과를 출력합니다.

Name : xyz
Age : 20

정리

$_GET은 URL 파라미터를 손쉽게 받아 처리할 수 있는 강력한 도구입니다. 다만 사용자가 임의로 조작할 수 있는 값이므로, 반드시 htmlspecialchars() 같은 함수로 출력 값을 이스케이프 처리하고, 필요에 따라 입력 값 검증(validation)도 함께 수행하는 것이 안전한 웹 개발의 기본입니다.