Web/Vulnerability
PHP - exit;
Alioth02
2024. 4. 25. 23:26
<?php
// 세션이 존재하는지 확인
if(!($_SESSION['userid'])) {
// 세션이 없을 시, 로그인 페이지로 이동
header("Location: /login.html");
// 코드 종료!!
exit;
}
?>
<!-- 로그인 후 볼 수 있는 메인 페이지 -->
<!DOCTYPE html>
<html>
<head>
<title>Alioth's Web Page</title>
</head>
<body>
This page can only be viewed by people who have a session!!
</body>
</html>
위의 코드는 사용자의 세션 유무를 확인한 뒤,
세션이 있다면 아래의 메인 페이지를 띄워주고,
없다면 로그인 페이지로 리다이렉트 보내는 php 코드이다.
해당 코드로 동작한 웹 응답을 보게 되면
Response 헤더에 로그인 페이지(/login.html)가 들어가 있는 것을 확인할 수 있고,
로그인 페이지로 리다이렉트 된 것을 302 코드로 확인할 수 있다.
그리고 메인 페이지 내용인 HTML 내용은 보이지 않는 것을 확인할 수 있다.
로그인 후 세션이 부여된 사용자만 볼 수 있는 메인 페이지이기 때문에 당연한 것이다.
<?php
// 세션이 존재하는지 확인
if(!($_SESSION['userid'])) {
// 세션이 없을 시, 로그인 페이지로 이동
header("Location: /login.html");
// 코드 종료!!
// exit;
}
?>
<!-- 로그인 후 볼 수 있는 메인 페이지 -->
<!DOCTYPE html>
<html>
<head>
<title>Alioth's Web Page</title>
</head>
<body>
This page can only be viewed by people who have a session!!
</body>
</html>
하지만 똑같은 코드에서
코드를 종료하는 "exit;"를 빠트린다면
Response 헤더 정보와 로그인 페이지로의 리다이렉트 기능은 동일하게 작동하고,
실제로 해당 웹 페이지를 접속했을 때, 사용자 입장에서는 똑같이 작동하는 것 처럼 보이지만,
코드를 종료하는 "exit;"이 빠지면서
Response 헤더 아래에 메인 페이지의 소스코드가 노출된 상태를 확인할 수 있다.
이처럼 세션이 없는 사용자에게 보여주기 싫은 메인 페이지의 정보를 보호하려면
exit; 코드를 빠트리지 않았는지 체크가 필요하다.