이번 강의에서는 HTML 폼과 PHP의 연동, GET과 POST 요청 처리, 폼 데이터의 유효성 검사 및 필터링, 그리고 보안 고려사항에 대해 다룰 것입니다. 이 강의를 통해 웹 애플리케이션에서 사용자 입력을 안전하게 처리하는 방법을 배울 수 있습니다.
1. HTML 폼과 PHP의 연동
1-1. HTML 폼 만들기
HTML 폼을 사용하여 사용자로부터 데이터를 입력받을 수 있습니다. 폼의 method 속성은 데이터를 전송하는 방법을 정의하며, action 속성은 데이터를 처리할 PHP 파일의 경로를 설정합니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>폼 예제</title>
</head>
<body>
<form action="process_form.php" method="post">
<label for="name">이름:</label>
<input type="text" id="name" name="name">
<br>
<label for="email">이메일:</label>
<input type="email" id="email" name="email">
<br>
<input type="submit" value="제출">
</form>
</body>
</html>
1-2. PHP로 폼 데이터 처리
폼 데이터를 처리하기 위해 PHP 파일을 작성하고, $_POST 또는 $_GET 슈퍼글로벌 배열을 사용하여 전송된 데이터를 접근합니다.
<?php
// process_form.php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
$name = htmlspecialchars($_POST['name']);
$email = htmlspecialchars($_POST['email']);
echo "이름: " . $name . "<br>";
echo "이메일: " . $email;
}
?>
2. GET과 POST 요청 처리
2-1. GET 요청
· GET 요청은 URL의 쿼리 문자열을 통해 데이터를 전송합니다.
· URL에 데이터가 포함되어 전송되므로 보안이 취약할 수 있습니다.
<?php
// get_example.php
$name = htmlspecialchars($_GET['name']);
echo "이름: " . $name;
?>
· HTML 폼의 GET 요청 예시
<form action="get_example.php" method="get">
<label for="name">이름:</label>
<input type="text" id="name" name="name">
<input type="submit" value="제출">
</form>
2-2. POST 요청
· POST 요청은 데이터를 HTTP 요청 본문에 포함하여 전송합니다.
· 데이터가 URL에 포함되지 않아 GET에 비해 상대적으로 보안이 좋습니다.
<?php
// post_example.php
$name = htmlspecialchars($_POST['name']);
echo "이름: " . $name;
?>
· HTML 폼의 POST 요청 예시
<form action="post_example.php" method="post">
<label for="name">이름:</label>
<input type="text" id="name" name="name">
<input type="submit" value="제출">
</form>
3. 폼 데이터 유효성 검사 및 필터링
3-1. 유효성 검사
폼 데이터를 유효성 검사하여 입력 값이 올바른지 확인합니다. PHP의 filter_var() 함수와 같은 내장 함수를 사용하여 유효성을 검토할 수 있습니다.
<?php
$email = $_POST['email'];
// 이메일 유효성 검사
if (filter_var($email, FILTER_VALIDATE_EMAIL)) {
echo "유효한 이메일 주소입니다.";
} else {
echo "유효하지 않은 이메일 주소입니다.";
}
?>
3-2. 필터링
필터링을 통해 사용자 입력의 잠재적인 위험 요소를 제거합니다. htmlspecialchars() 함수를 사용하여 HTML 특수 문자를 변환하거나, filter_var()를 사용하여 다양한 필터를 적용합니다.
<?php
$name = htmlspecialchars($_POST['name']);
echo "이름: " . $name;
?>
4. 보안 고려사항
4-1. SQL 인젝션
SQL 인젝션은 공격자가 악의적인 SQL 코드를 삽입하여 데이터베이스를 조작할 수 있는 보안 취약점입니다. 이를 방지하기 위해 준비된 문장(Prepared Statements) 또는 PDO를 사용합니다.
<?php
// PDO 사용 예시
$pdo = new PDO('mysql:host=localhost;dbname=test', 'root', '');
$stmt = $pdo->prepare('SELECT * FROM users WHERE email = :email');
$stmt->execute(['email' => $_POST['email']]);
$user = $stmt->fetch();
echo $user['name'];
?>
4-2. XSS (교차 사이트 스크립팅)
XSS 공격은 공격자가 웹 페이지에 악의적인 스크립트를 삽입하여 사용자의 브라우저에서 실행되도록 하는 공격입니다. 이를 방지하기 위해 사용자 입력을 적절히 이스케이프합니다.
<?php
$message = htmlspecialchars($_POST['message']);
echo "메시지: " . $message;
?>
- 이전 수업 목록
'프로그래밍 > PHP' 카테고리의 다른 글
[PHP 수업] 12강 - 파일 처리 (0) | 2024.08.09 |
---|---|
[PHP 수업] 11강 - 세션과 쿠키 (0) | 2024.08.08 |
[PHP 수업] 9강 - 문자열 처리 (0) | 2024.08.06 |
[PHP 수업] 8강 - 배열 (0) | 2024.08.05 |
[PHP 수업] 7강 - 함수 (0) | 2024.08.01 |