
PHP ์จ๋ผ์ธ ๊ฐ์
>PHP - ์ด๊ธ
๐ PHP ์ด๊ธ - 7์ฃผ์ฐจ: HTML ํผ ์ฒ๋ฆฌ ๋ฐ GET/POST ๋ฐฉ์ - 04 ํผ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ (๊ฐ๋จํ ์์)
![]() |
ํ์ | 10.0 | ๋ผ์ด์ผ์ค | free |
---|---|---|---|---|
์ฌ์ฉ์ํ์ | 10.0 | ์ด์์ฒด์ | ||
๋ค์ด๋ก๋ | 1 | ํ์ผํฌ๊ธฐ | 0 | |
์ ์์ฌ | LUZENSOFT | ๋ฑ๋ก์ผ | 2025-07-01 16:41:34 | |
์กฐํ์ | 46 |
๐ PHP ์ด๊ธ - 7์ฃผ์ฐจ: HTML ํผ ์ฒ๋ฆฌ ๋ฐ GET/POST ๋ฐฉ์ - 04 ํผ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ (๊ฐ๋จํ ์์)
์ง๋ ์๊ฐ์๋ $_GET
, $_POST
, $_REQUEST
์ํผ ๊ธ๋ก๋ฒ ๋ณ์๋ฅผ ํตํด #HTML ํผ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋ฐฉ๋ฒ์ ์์๋ณด์์ต๋๋ค. ์ด๋ฒ ์๊ฐ์๋ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ #ํผ ๋ฐ์ดํฐ๊ฐ ์๋ฒ๋ก ์ ์ก๋๊ธฐ ์ ์, ๋๋ ์๋ฒ์์ ์ฒ๋ฆฌ๋๊ธฐ ์ ์ ํน์ ์กฐ๊ฑด์ ๋ถํฉํ๋์ง ํ์ธํ๋ ๊ณผ์ ์ธ #์ ํจ์ฑ ๊ฒ์ฌ(Validation)์ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋
๊ณผ ๊ฐ๋จํ ์์๋ฅผ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
ํผ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ์ ์ค์์ฑ
#ํผ ๋ฐ์ดํฐ #์ ํจ์ฑ ๊ฒ์ฌ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์์ ์ฑ๊ณผ ๋ณด์์ฑ์ ํ๋ณดํ๋ ๋ฐ ๋งค์ฐ ์ค์ํ ๊ณผ์ ์ ๋๋ค.
๋ฐ์ดํฐ ํ์ง ํฅ์: ์ฌ์ฉ์๊ฐ ํ์ ์ ๋ณด๋ฅผ ๋๋ฝํ๊ฑฐ๋ ์๋ชป๋ ํ์์ผ๋ก ์ ๋ ฅํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ ๋ฐ์ดํฐ์ ์ ํ์ฑ์ ๋์ ๋๋ค.
๋ณด์ ๊ฐํ: ์ ์์ ์ธ ์ฌ์ฉ์๊ฐ ์คํฌ๋ฆฝํธ ๊ณต๊ฒฉ(์: #XSS, #SQL ์ธ์ ์ )์ ์ ์ฉ๋ ์ ์๋ ์ํํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ์กํ๋ ๊ฒ์ ์ฐจ๋จํฉ๋๋ค.
์ฌ์ฉ์ ๊ฒฝํ ๊ฐ์ : ์๋ชป๋ ์ ๋ ฅ์ ๋ํด ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ์ ์ ๊ณตํ์ฌ ์ฌ์ฉ์๊ฐ ์ค๋ฅ๋ฅผ ์์ ํ๊ณ ์ฌ๋ฐ๋ฅธ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๋๋ก ์ ๋ํฉ๋๋ค.
์๋ฒ ์์ ๋ณดํธ: ๋ถํ์ํ๊ฑฐ๋ ์๋ชป๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ฅผ ์ฌ์ ์ ๋ฐฉ์งํ์ฌ ์๋ฒ์ ๋ถํ๋ฅผ ์ค์ด๊ณ ํจ์จ์ฑ์ ๋์ ๋๋ค.
๊ฐ๋จํ ์ ํจ์ฑ ๊ฒ์ฌ ์์ (PHP)
์ด๋ฒ ์์์์๋ ๊ฐ๋จํ ์ด๋ฆ ์ ๋ ฅ ํผ์ ํตํด ํ์ ํ๋ ๊ฒ์ฌ์ ๊ธธ์ด ์ ํ ๊ฒ์ฌ๋ฅผ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฌ๊ฒ ์ต๋๋ค.
HTML ํผ
HTML
<!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>
<h1>์ด๋ฆ ์
๋ ฅ ํผ</h1>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>">
<label for="name">์ด๋ฆ:</label>
<input type="text" id="name" name="name">
<span class="error"><?php if (isset($nameErr)) echo $nameErr;?></span>
<br><br>
<input type="submit" name="submit" value="์ ์ถ">
</form>
</body>
</html>
PHP ์ ํจ์ฑ ๊ฒ์ฌ ์คํฌ๋ฆฝํธ
PHP
<?php
// ์๋ฌ ๋ฉ์์ง๋ฅผ ์ ์ฅํ ๋ณ์ ์ด๊ธฐํ
$nameErr = "";
$name = "";
if ($_SERVER["REQUEST_METHOD"] == "POST") {
// 'name' ํ๋๊ฐ ๋น์ด์๋์ง ๊ฒ์ฌ
if (empty($_POST["name"])) {
$nameErr = "์ด๋ฆ์ ํ์ ์
๋ ฅ ํญ๋ชฉ์
๋๋ค.";
} else {
// ์
๋ ฅ ๋ฐ์ดํฐ ์ ๋ฆฌ ๋ฐ ๋ณด์ ์ฒ๋ฆฌ
$name = test_input($_POST["name"]);
// ์ด๋ฆ์ ๋ฌธ์(์๋ฌธ, ํ๊ธ)์ ๊ณต๋ฐฑ๋ง ํฌํจ๋์ด ์๋์ง ํ์ธ (์ ๊ท ํํ์)
if (!preg_match("/^[a-zA-Z๊ฐ-ํฃ ]*$/",$name)) {
$nameErr = "์ด๋ฆ์ ํ์ฉ๋์ง ์๋ ๋ฌธ์๊ฐ ์์ต๋๋ค.";
}
// ์ด๋ฆ์ ๊ธธ์ด ์ ํ ๊ฒ์ฌ (20์ ์ด๋ด)
elseif (mb_strlen($name, 'UTF-8') > 20) { // ํ๊ธ ํฌํจ ๊ธธ์ด๋ฅผ ์ํด mb_strlen ์ฌ์ฉ
$nameErr = "์ด๋ฆ์ 20์ ์ด๋ด๋ก ์
๋ ฅํด์ฃผ์ธ์.";
}
}
}
// ์
๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌํ๊ณ ๋ณด์ ์ฒ๋ฆฌํ๋ ํจ์
function test_input($data) {
$data = trim($data); // ์๋ค ๊ณต๋ฐฑ ์ ๊ฑฐ
$data = stripslashes($data); // ์ญ์ฌ๋์ ์ ๊ฑฐ
$data = htmlspecialchars($data); // HTML ํน์ ๋ฌธ์ ์ํฐํฐ๋ก ๋ณํ
return $data;
}
?>
์ฝ๋ ์ค๋ช
htmlspecialchars($_SERVER['PHP_SELF'])
: ํผ ๋ฐ์ดํฐ๋ฅผ ํ์ฌ ์คํฌ๋ฆฝํธ ํ์ผ๋ก ์ ์กํฉ๋๋ค.htmlspecialchars()
ํจ์๋ #XSS ๊ณต๊ฒฉ์ ๋ฐฉ์งํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค.$_SERVER["REQUEST_METHOD"] == "POST"
: ํผ์ด POST ๋ฐฉ์์ผ๋ก ์ ์ถ๋์๋์ง ํ์ธํฉ๋๋ค.empty($_POST["name"])
:$_POST["name"]
์ด ๋น์ด ์๋์ง ํ์ธํ์ฌ ํ์ ํ๋ ๊ฒ์ฌ๋ฅผ ์ํํฉ๋๋ค.test_input($data)
ํจ์: ์ ๋ ฅ๋ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฆฌ(trim), ์ญ์ฌ๋์ ์ ๊ฑฐ(stripslashes), #HTML ํน์ ๋ฌธ์ ์ธ์ฝ๋ฉ(htmlspecialchars)ํ์ฌ ๊ธฐ๋ณธ์ ์ธ ๋ณด์ ์ฒ๋ฆฌ๋ฅผ ์ํํฉ๋๋ค.preg_match("/^[a-zA-Z๊ฐ-ํฃ ]*$/",$name)
: #์ ๊ท ํํ์์ ์ฌ์ฉํ์ฌ ์ด๋ฆ์ ์๋ฌธ์, ํ๊ธ, ๊ณต๋ฐฑ๋ง ํฌํจ๋์ด ์๋์ง ํ์ธํฉ๋๋ค.mb_strlen($name, 'UTF-8') > 20
: ์ ๋ ฅ๋ ์ด๋ฆ์ ๊ธธ์ด๊ฐ 20์๋ฅผ ์ด๊ณผํ๋์ง ํ์ธํฉ๋๋ค. #ํ๊ธ์ ํฌํจํ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ ํํ ์ธ๊ธฐ ์ํดmb_strlen
ํจ์๋ฅผ ์ฌ์ฉํ๊ณ ์ธ์ฝ๋ฉ์UTF-8
๋ก ์ง์ ํ์ต๋๋ค.<span class="error"><?php if (isset($nameErr)) echo $nameErr;?></span>
: ์ ํจ์ฑ ๊ฒ์ฌ ์คํจ ์ ํด๋น ์๋ฌ ๋ฉ์์ง๋ฅผ ํ๋ฉด์ ํ์ํฉ๋๋ค.
์ถ๊ฐ์ ์ธ ์ ํจ์ฑ ๊ฒ์ฌ ๋ฐฉ๋ฒ
์ ์์๋ ๊ธฐ๋ณธ์ ์ธ ์ ํจ์ฑ ๊ฒ์ฌ์ด๋ฉฐ, ์ค์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ ๋ค์ํ ์ ํจ์ฑ ๊ฒ์ฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค.
๋ฐ์ดํฐ ํ์ ๊ฒ์ฌ: ์ด๋ฉ์ผ ์ฃผ์ ํ์, ์ ํ๋ฒํธ ํ์, ๋ ์ง ํ์ ๋ฑ ํน์ ํ์์ ๋ง๋์ง ๊ฒ์ฌํฉ๋๋ค. (
filter_var()
ํจ์ ์ฌ์ฉ ๊ณ ๋ ค)๋ฐ์ดํฐ ๊ฐ ๋ฒ์ ๊ฒ์ฌ: ์ซ์์ ์ต์๊ฐ, ์ต๋๊ฐ ๋๋ ํน์ ๋ฒ์ ๋ด์ ์๋์ง ๊ฒ์ฌํฉ๋๋ค.
๋ฐ์ดํฐ ์กด์ฌ ์ ๋ฌด ๊ฒ์ฌ: ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ด๋ฏธ ์กด์ฌํ๋ ๊ฐ์ธ์ง ํ์ธํฉ๋๋ค. (์: ์ค๋ณต ์์ด๋/์ด๋ฉ์ผ ํ์ธ)
ํด๋ผ์ด์ธํธ ์ธก ์ ํจ์ฑ ๊ฒ์ฌ (JavaScript): ์๋ฒ ์ธก ๊ฒ์ฌ ์ ์ ํด๋ผ์ด์ธํธ ์ธก์์ ๊ธฐ๋ณธ์ ์ธ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ์ฌ ์ฌ์ฉ์ ๊ฒฝํ์ ํฅ์์ํฌ ์ ์์ต๋๋ค. ํ์ง๋ง #ํด๋ผ์ด์ธํธ ์ธก ๊ฒ์ฌ๋ ์ฐํ๋ ์ ์์ผ๋ฏ๋ก #์๋ฒ ์ธก ๊ฒ์ฌ๋ ํ์์ ๋๋ค.
๊ฒฐ๋ก
#ํผ ๋ฐ์ดํฐ #์ ํจ์ฑ ๊ฒ์ฌ๋ ์์ ํ๊ณ ์์ ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์ ํ์์ ์ธ ๋จ๊ณ์ ๋๋ค. #PHP์์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ, ์ํฉ์ ๋ง๋ ์ ์ ํ ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ์ ํํ์ฌ ์ ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์ ์๊ฐ์๋ ํผ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.