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

PHP $_POST 완벽 가이드: POST 방식 데이터 처리하기

PHP $_POST란 무엇인가?

$_POST는 PHP에서 미리 정의된(superglobal) 변수로, HTTP POST 방식으로 전송된 키-값(key-value) 쌍의 데이터를 담고 있는 연관 배열(associative array)입니다. 이 변수가 값을 받기 위해서는 요청 시 콘텐츠 타입이 application/x-www-form-urlencoded 또는 multipart/form-data여야 합니다.

참고로 과거에는 $HTTP_POST_VARS라는 변수에 같은 정보가 담겨 있었지만, 이 변수는 슈퍼글로벌(superglobal)이 아니며 현재는 폐기(deprecated)되었으므로 사용하지 않는 것이 좋습니다.

HTML 폼으로 POST 데이터 전송하기

POST 요청으로 서버에 데이터를 전송하는 가장 간단한 방법은 HTML 폼의 method 속성을 POST로 지정하는 것입니다.

예를 들어 브라우저의 주소가 https://localhost/testscript.php라고 가정하고, 다음과 같이 test.html 파일에서 method를 POST로 설정할 수 있습니다.

<form action="testscript.php" method="POST">
    <input type="text" name="name">
    <input type="text" name="age">
    <input type="submit" value="submit">
</form>

$_POST로 데이터 받기 예제

전송된 데이터를 PHP 스크립트에서 받아 출력하는 코드는 다음과 같습니다.

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

실행 결과

사용자가 name=xyz, age=20이라는 값을 입력해 전송했다면 아래와 같은 결과가 출력됩니다.

Name : xyz
Age : 20

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

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

이 함수가 변환하는 대표적인 문자는 다음과 같습니다.

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

앞선 예제에 htmlspecialchars() 함수를 적용하면 다음과 같습니다.

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

실행 결과

출력 결과는 동일하지만, 악성 코드가 포함된 입력값도 안전하게 화면에 표시됩니다.

Name : xyz
Age : 20

정리

$_POST는 HTML 폼을 통해 전송된 POST 방식의 데이터를 처리하는 핵심 변수입니다. 실무에서는 반드시 htmlspecialchars()와 같은 함수로 출력값을 이스케이프(escape) 처리하여 웹 보안을 강화하는 습관을 들이는 것이 좋습니다.