PHP 개발시 보안 취약점이 생기지 않게 주의해야 할 느슨 비교(==)

PHP의 느슨한 비교(==)는 효율적인 개발을 돕기도 하지만, 보안 취약점을 발생시키기도 합니다. 예컨대 아래 코드를 보세요. 이해를 위해 암호화는 생략한 코드입니다.

$username = $_POST['username'];
$password = $_POST['password'];

if ($username == 'admin' && $password == '12345') {
    echo "인증 완료";
}

물론 현대적인 인증은 아니지만 기본적인 간단한 인증으로 보이죠. 그런데 아래 코드는 if문 안쪽이 실행됩니다.

// 값으로 true가 들어오면 인증됨
$username = true;
$password = true;

if ($username == 'admin' && $password == '12345') {
    echo '인증 완료';
}

즉, PHP에서 '문자열' == true 비교 결과는 놀랍게도 true입니다.

그래서 아래처럼 ===를 써야 합니다.

$username = true;
$password = true;

if ($username === 'admin' && $password === '12345') {
    echo '엄격한 비교를 사용해야 합니다.';
}

이러면 if문 안쪽은 실행되지 않죠.

(다행히 JS는 이렇지 않습니다.)

참고: PHP Secure Coding: Don’t Let the Code Get Loose

카테고리

17년차 풀스택 웹 개발자 Mytory입니다

웹 개발에서도 중요한 것은 개념입니다.
이 블로그에는 제가 개발하며 익힌 개념들을 정리합니다.

워드프레스를 오래 다뤄 왔고 강의도 두 편 찍었습니다.
– 인프런 “워드프레스 제대로 개발하기 어드민 편, 클라이언트 편
– 클래스101 “누구나 할 수 있는 워드프레스 홈페이지 만들기 – 기획부터 출시까지 한 방에 OK

유튜브 채널에 워드프레스 관련 팁들을 올리고 있습니다.

👉 소개 더 보기

대표글

댓글 남기기