์จ๋ผ์ธ ๊ฐ์
>PHP - ์ด๊ธ
๐ PHP ์ด๊ธ - 7์ฃผ์ฐจ: HTML ํผ ์ฒ๋ฆฌ ๋ฐ GET/POST ๋ฐฉ์ - 04 ํผ ๋ฐ์ดํฐ ์ ํจ์ฑ ๊ฒ์ฌ (๊ฐ๋จํ ์์)
				์ฃผ์ ํ๋ก๊ทธ๋จ ์คํ
- ํ์ : 10.0
 - ๋ผ์ด์ ์ค: free
 - ์ด์์ฒด์ :
 - ํ์ผ ํฌ๊ธฐ: 0
 
ํผ๋๋ฐฑ ๋ฐ ๋ค์ด๋ก๋
- ์ฌ์ฉ์ ํ์ : 10.0
 - ๋ค์ด๋ก๋ ์: 1
 - ์กฐํ์: 97
 
์ ์กฐ์ฌ ๋ฐ ๋ฑ๋ก ์ ๋ณด
- ์ ์์ฌ: LUZENSOFT
 - ๋ฑ๋ก์ผ: 2025-07-01 16:41:34
 
- ์ค๋ช
๐ 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์์๋ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ํํ ์ ์์ผ๋ฉฐ, ์ํฉ์ ๋ง๋ ์ ์ ํ ๊ฒ์ฆ ๋ฐฉ๋ฒ์ ์ ํํ์ฌ ์ ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค. ๋ค์ ์๊ฐ์๋ ํผ ๋ฐ์ดํฐ๋ฅผ ์์ ํ๊ฒ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํด ๋ ์์ธํ ์์๋ณด๊ฒ ์ต๋๋ค.