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는 이렇지 않습니다.)
댓글 남기기