서버측 비밀번호 검증코드

황인환·2024년 9월 6일

예시코드

<?php

function validatePassword($password) {
    // 최소 길이
    $minLength = 8;
    
    // 정규 표현식
    $hasUppercase = preg_match('/[A-Z]/', $password);
    $hasLowercase = preg_match('/[a-z]/', $password);
    $hasDigit = preg_match('/\d/', $password);
    $hasSpecialChar = preg_match('/[\W_]/', $password);
    //특정 특수문자
    //$hasSpecialChar = preg_match('/[!@#$%^&*()_+]/', $password);

    
    if (strlen($password) < $minLength) {
        return "비밀번호는 최소 {$minLength}자 이상이어야 합니다.";
    }
    
    if (!$hasUppercase) {
        return "비밀번호는 대문자를 포함해야 합니다.";
    }
    
    if (!$hasLowercase) {
        return "비밀번호는 소문자를 포함해야 합니다.";
    }
    
    if (!$hasDigit) {
        return "비밀번호는 숫자를 포함해야 합니다.";
    }
    
    if (!$hasSpecialChar) {
        return "비밀번호는 특수 문자를 포함해야 합니다.";
    }
    
    return "비밀번호가 유효합니다.";
}

// 예시
$password = "Test@1234";
echo validatePassword($password);

?>

검증조건

  • 최소 길이
  • 대문자 포함 여부
  • 소문자 포함 여부
  • 숫자 포함 여부
  • 특수 문자 포함 여부

서버측 검증

함수설명

함수설명
$minLength비밀번호의 최소 길이를 정의합니다.
preg_match문자열이 정규 표현식과 일치하는지 검사하고, 일치하는 경우 결과를 변수에 저장합니다.

정규표현식 설명

정규 표현식설명
대문자[A-Z]
소문자[a-z]
숫자\d
특수 문자[\W_] (비문자, 또는 언더스코어)

실제 적용예시

필터링 단계마다 있는 if문 안에 $checkPassword함수에 값을 달리하여 무엇이 문제인지를 파악할 수 있습니다.

서버측

<?php
function CheckPassword($password) {
    // 최소 길이
    $minLength = 8;
    
    // 정규 표현식
    $hasUppercase = preg_match('/[A-Z]/', $password);
    $hasLowercase = preg_match('/[a-z]/', $password);
    $hasDigit = preg_match('/\d/', $password);
    $hasSpecialChar = preg_match('/[\W_]/', $password);
    //특정 특수문자
    //$hasSpecialChar = preg_match('/[!@#$%^&*()_+]/', $password);

    
    if (strlen($password) < $minLength) {
        echo "비밀번호는 최소 {$minLength}자 이상이어야 합니다.";
        $checkPassword="a";
        return $checkPassword;
    }
    
    if (!$hasUppercase) {
        echo "비밀번호는 대문자를 포함해야 합니다.";
        $checkPassword="b";
        return $checkPassword;
    }
    
    if (!$hasLowercase) {
        echo "비밀번호는 소문자를 포함해야 합니다.";
        $checkPassword="c";
        return $checkPassword;
    }
    
    if (!$hasDigit) {
        echo "비밀번호는 숫자를 포함해야 합니다.";
        $checkPassword="d";
        return $checkPassword;
    }
    
    if (!$hasSpecialChar) {
        echo "비밀번호는 특수 문자를 포함해야 합니다.";
        $checkPassword="e";
        return $checkPassword; 
    }
    echo "비밀번호가 유효합니다.";
    $checkPassword="True";
    return $checkPassword;
}

?>

클라이언트 측

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
    
    </head>
    <body>
    <form action="" method=get>
        <input type="text" name=a>
    </form>
    
    </body>
</html>

<?php
$a=$_GET['a'];
$b=CheckPassword($a);

if($b=="True"){
	//TEST통과 알람
    echo "<script>alert(\"TEST Success\")</script>";
}
?>

0개의 댓글