216.73.216.34 TODAY : 208

PHP ์˜จ๋ผ์ธ ๊ฐ•์˜

 > 

PHP - ์ดˆ๊ธ‰

๐Ÿ“š PHP ์ดˆ๊ธ‰ - 7์ฃผ์ฐจ: HTML ํผ ์ฒ˜๋ฆฌ ๋ฐ GET/POST ๋ฐฉ์‹ - 04 ํผ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ)

๐Ÿ“š 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)์˜ ๊ธฐ๋ณธ์ ์ธ ๊ฐœ๋…๊ณผ ๊ฐ„๋‹จํ•œ ์˜ˆ์‹œ๋ฅผ ์‚ดํŽด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.




ํผ ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์˜ ์ค‘์š”์„ฑ


#ํผ ๋ฐ์ดํ„ฐ #์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์•ˆ์ •์„ฑ๊ณผ ๋ณด์•ˆ์„ฑ์„ ํ™•๋ณดํ•˜๋Š” ๋ฐ ๋งค์šฐ ์ค‘์š”ํ•œ ๊ณผ์ •์ž…๋‹ˆ๋‹ค.

uploadImage



  • ๋ฐ์ดํ„ฐ ํ’ˆ์งˆ ํ–ฅ์ƒ: ์‚ฌ์šฉ์ž๊ฐ€ ํ•„์ˆ˜ ์ •๋ณด๋ฅผ ๋ˆ„๋ฝํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ํ˜•์‹์œผ๋กœ ์ž…๋ ฅํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๋ฐ์ดํ„ฐ์˜ ์ •ํ™•์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.

  • ๋ณด์•ˆ ๊ฐ•ํ™”: ์•…์˜์ ์ธ ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋ฆฝํŠธ ๊ณต๊ฒฉ(์˜ˆ: #XSS, #SQL ์ธ์ ์…˜)์— ์•…์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์œ„ํ—˜ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•˜๋Š” ๊ฒƒ์„ ์ฐจ๋‹จํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐœ์„ : ์ž˜๋ชป๋œ ์ž…๋ ฅ์— ๋Œ€ํ•ด ์ฆ‰๊ฐ์ ์ธ ํ”ผ๋“œ๋ฐฑ์„ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ์ˆ˜์ •ํ•˜๊ณ  ์˜ฌ๋ฐ”๋ฅธ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅํ•˜๋„๋ก ์œ ๋„ํ•ฉ๋‹ˆ๋‹ค.

  • ์„œ๋ฒ„ ์ž์› ๋ณดํ˜ธ: ๋ถˆํ•„์š”ํ•˜๊ฑฐ๋‚˜ ์ž˜๋ชป๋œ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์‚ฌ์ „์— ๋ฐฉ์ง€ํ•˜์—ฌ ์„œ๋ฒ„์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  ํšจ์œจ์„ฑ์„ ๋†’์ž…๋‹ˆ๋‹ค.







๊ฐ„๋‹จํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์˜ˆ์‹œ (PHP)


์ด๋ฒˆ ์˜ˆ์‹œ์—์„œ๋Š” ๊ฐ„๋‹จํ•œ ์ด๋ฆ„ ์ž…๋ ฅ ํผ์„ ํ†ตํ•ด ํ•„์ˆ˜ ํ•„๋“œ ๊ฒ€์‚ฌ์™€ ๊ธธ์ด ์ œํ•œ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋ณด์—ฌ๋“œ๋ฆฌ๊ฒ ์Šต๋‹ˆ๋‹ค.

uploadImage



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>: ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ์‹คํŒจ ์‹œ ํ•ด๋‹น ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ํ™”๋ฉด์— ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค.







์ถ”๊ฐ€์ ์ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ ๋ฐฉ๋ฒ•


uploadImage


์œ„ ์˜ˆ์‹œ๋Š” ๊ธฐ๋ณธ์ ์ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ์ด๋ฉฐ, ์‹ค์ œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ๋Š” ๋” ๋‹ค์–‘ํ•œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.



  • ๋ฐ์ดํ„ฐ ํ˜•์‹ ๊ฒ€์‚ฌ: ์ด๋ฉ”์ผ ์ฃผ์†Œ ํ˜•์‹, ์ „ํ™”๋ฒˆํ˜ธ ํ˜•์‹, ๋‚ ์งœ ํ˜•์‹ ๋“ฑ ํŠน์ • ํ˜•์‹์— ๋งž๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค. (filter_var() ํ•จ์ˆ˜ ์‚ฌ์šฉ ๊ณ ๋ ค)

  • ๋ฐ์ดํ„ฐ ๊ฐ’ ๋ฒ”์œ„ ๊ฒ€์‚ฌ: ์ˆซ์ž์˜ ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ“๊ฐ’ ๋˜๋Š” ํŠน์ • ๋ฒ”์œ„ ๋‚ด์— ์žˆ๋Š”์ง€ ๊ฒ€์‚ฌํ•ฉ๋‹ˆ๋‹ค.

  • ๋ฐ์ดํ„ฐ ์กด์žฌ ์œ ๋ฌด ๊ฒ€์‚ฌ: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฐ’์ธ์ง€ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค. (์˜ˆ: ์ค‘๋ณต ์•„์ด๋””/์ด๋ฉ”์ผ ํ™•์ธ)

  • ํด๋ผ์ด์–ธํŠธ ์ธก ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ (JavaScript): ์„œ๋ฒ„ ์ธก ๊ฒ€์‚ฌ ์ „์— ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ ๊ธฐ๋ณธ์ ์ธ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ #ํด๋ผ์ด์–ธํŠธ ์ธก ๊ฒ€์‚ฌ๋Š” ์šฐํšŒ๋  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ #์„œ๋ฒ„ ์ธก ๊ฒ€์‚ฌ๋Š” ํ•„์ˆ˜์ž…๋‹ˆ๋‹ค.

uploadImage






๊ฒฐ๋ก 




#ํผ ๋ฐ์ดํ„ฐ #์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋Š” ์•ˆ์ „ํ•˜๊ณ  ์•ˆ์ •์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ํ•„์ˆ˜์ ์ธ ๋‹จ๊ณ„์ž…๋‹ˆ๋‹ค. #PHP์—์„œ๋Š” ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ƒํ™ฉ์— ๋งž๋Š” ์ ์ ˆํ•œ ๊ฒ€์ฆ ๋ฐฉ๋ฒ•์„ ์„ ํƒํ•˜์—ฌ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ์‹œ๊ฐ„์—๋Š” ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ๋” ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.