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; 코드를 빠트리지 않았는지 체크가 필요하다.