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)로 변환하는 것이 안전합니다.
이 함수가 변환하는 주요 문자들은 다음과 같습니다.
| 문자 | 변환 결과 |
|---|---|
| < (작음 기호) | < |
| ' (작은따옴표) | ' 또는 ' |
| " (큰따옴표) | " |
| & (앰퍼샌드) | & |
| > (큼 기호) | > |
마찬가지로 브라우저의 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)도 함께 수행하는 것이 안전한 웹 개발의 기본입니다.