Form Validation
보안을 염두에두고 PHP 양식을 처리하는 방법을 보여준다.
양식 데이터의 적절한 유효성 검사는 해커 및 스패머로부터 양식을 보호하는 데 중요하다.
PHP로 양식 데이터 유효성 검사
스크립트를 시작할 때 양식이 $_SERVER[“REQUEST_METHOD”]를 사용하여 제출되었는지 확인한다.
REQUEST_METHOD이 POST이면 양식이 제출되었으며 유효성을 검사해야한다.
제출되지 않은 경우 유효성 검사를 건너뛰고 빈 양식을 표시한다.
<?php $name = $email = $gender = $comment = $website = ""; if ($_SERVER["REQUEST_METHOD"] == "POST") { $name = test_input($_POST["name"]); $email = test_input($_POST["email"]); $website = test_input($_POST["website"]); $comment = test_input($_POST["comment"]); $gender = test_input($_POST["gender"]); } function test_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } ?>
사용자가 데이터를 입력하지 않아도 스크립트가 정상적으로 작동한다.
양식 요소
양식이 제출되면 양식 데이터는 method=”post”와 함께 전송된다.
[qnasvg]
[qna q=”$_SERVER [’PHP_SELF’] 변수는 무엇일까?” a=”$_SERVER[’PHP_SELF’]은 현재 실행 중인 스크립트의 파일 이름을 반환하는 수퍼 전역 변수다. 따라서 $_SERVER[’PHP_SELF’]은 다른 페이지로 이동하는 대신 제출된 양식 데이터를 페이지 자체로 보낸다. 이렇게 하면 사용자가 양식과 동일한 페이지에 오류 메시지를 받게된다.”]
[qna q=”htmlspecialchars() 함수는 무엇일까?” a=”htmlspecialchars() 함수는 특수 문자를 HTML 엔티티로 변환한다. 즉, < 및 >와 같은 HTML 문자를 < 그리고 >. 이렇게 하면 공격자가 양식에 HTML 또는 Javascript 코드(교차 사이트 스크립팅 공격)를 삽입하여 코드를 악용하는 것을 방지할 수 있다.”]
<?php echo "Your Input:
"; echo $name; echo "
"; echo $email; echo "
"; echo $website; echo "
"; echo $comment; echo "
"; echo $gender; ?>
양식 보안에 대한 큰 참고 사항
$_SERVER[“PHP_SELF”] 변수는 해커가 사용할 수 있다.
PHP_SELF가 페이지에서 사용되는 경우 사용자는 슬래시(/)를 입력한 다음 실행할 XSS(교차 사이트 스크립팅) 명령을 입력할 수 있다.
XSS(교차 사이트 스크립팅)는 일반적으로 웹 응용 프로그램에서 발견되는 컴퓨터 보안 취약점의 한 유형이다.
XSS를 사용하면 공격자가 클라이언트 쪽 스크립트를 다른 사용자가 보는 웹 페이지에 삽입할 수 있다.
예를 들어, “test_form.php”라는 페이지에 다음 양식이 있다고 가정해보자.
<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
이제 사용자가 “http://www.example.com/test_form.php”과 같은 주소 표시 줄에 일반 URL을 입력하면 위의 코드가 다음과 같이 변환된다.