아래는 서버 코드이다.
<?php
include "../../config.php";
if($_GET['view-source'] == 1){ view_source(); }
if(!$_COOKIE['user_lv']){
SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
echo("<meta http-equiv=refresh content=0>");
}
?>
<html>
<head>
<title>Challenge 1</title>
</head>
<body bgcolor=black>
<center>
<br><br><br><br><br>
<font color=white>
---------------------<br>
<?php
if(!is_numeric($_COOKIE['user_lv'])) $_COOKIE['user_lv']=1;
if($_COOKIE['user_lv']>=4) $_COOKIE['user_lv']=1;
if($_COOKIE['user_lv']>3) solve(1);
echo "<br>level : {$_COOKIE['user_lv']}";
?>
<br>
<a href=./?view-source=1>view-source</a>
</body>
</html>
서버 코드를 해석해보면 처음에 쿠키가 세팅 되어있지 않다면
SetCookie("user_lv","1",time()+86400*30,"/challenge/web-01/");
이렇게 쿠키를 세팅해준다.
쿠키 이름은 user_lv이고 값은 1이고 만료시간은 time()*86400 x 30이다.
만료시간을 엄청 크게 설정해주었다.
그리고 밑에 코드를 해석하면 is_numeric으로 user_lv이 숫자인지 확인 후 user_lv을 1로 세팅한다.
그리고 혹시나 user_lv이 4이상이면 1로 세팅하고
3초과이면 solve(1)을 실행시킨다.
그리고 조건없이 user_lv을 echo로 출력한다.
아마 출력되는 쿠키와 solve()함수를 실행시키는 것이 중요 포인트로 보인다.
4이상이고 3초과인 숫자는 ,, 정수는 아니여야 한다.
그래서 쿠키를 아래처럼 3.5로 바꾸어 보겠다.
그럼 조건문에서 4이상 조건문은 통과하고 3.5를 유지한채로 3초과 조건문에 들어오게 되어 solve()함수를 실행한다.
아래처럼 성공적으로 문제가 해결된 것을 볼 수 있다.