8. 실습
1.문제 상황
서울시 OO 구 공공 테니스 코트는 코로나 이후 야외 활동 인구가 늘면서 수요가 많아졌음
예약 방식은 웹 사이트를 통해 정해진 시간에 선착순으로 날짜와 이용 시간을 선택하여 예약하는 방식
공공시설이다 보니 비용이 저렴하여 인기가 많았던 해당 테니스 코트는 남들보다 먼저 예약하기 위해 예약하려는 사람들 간의 경쟁이 치열했는데,
그 과정에서 공정하지 못한 방법을 통해 예약하는 경우도 많아지게 되었음
예를 들면 매크로와 같은 자동 예약 프로그램이나 그 외에 다른 꼼수를 활용하여 물리적인 속도로는 불가능한 시간에 예약을 성공시키는 경우라고 볼 수 있으며,
따라서 이러한 방법을 알지 못하는 일반 시민들은 예약에 성공한 적이 거의 없다고 함
2. 발생 원인 분석
비정상적인 접근 방법 중 하나는 웹 사이트의 URL을 통한 직접 접근 방식이었는데,
예를 들면 다음과 같음
ex) URL 경로 예시
http://테니스코트주소.kr/fmcs/4?center=YCS04&part=02&base_date=20230411&action=write …
→ 정리하면, URL에 작성된 쿼리 파라미터를 통해 각 변수들의 의미를 추측하고 예매가 시작되면 원하는 날짜와 시간 등을 작성한 미리 준비된 URL로 직접 요청을 전송하여 예매를 1초도 되지 않는 시간에 마칠 수 있는 방식으로 악용됨


3. 정상적인 접근 방법
정상적인 접근 방법은 아래와 같은 세 단계의 과정을 거쳐야 함
- 코트 조회
- 원하는 시간과 날짜 입력
- 예약 버튼 선택
하지만 URL에 직접 접근하는 방식을 통해 예약 전송 요청을 바로 수행해버릴 경우,
위의 세 단계를 한 번에 건너뛸 수 있게 되면서 먼저 예약을 할 수 있게 되는 것이라고 볼 수 있음
따라서 이 문제를 해결하여 공정한 경쟁을 통해 테니스장을 예매할 수 있도록 도와주자
3. 실습 환경 세팅
-
제공된 서블릿 프로젝트(.zip) 다운로드
-
원하는 IDE에서 import
-
서버 실행 및 정상 동작 확인
src/main/webapp/index.html실행 후 아래 페이지 출력 여부 확인

4. 요구 사항
아래의 URL처럼 URL로 직접 접근하여 예매 요청을 전송할 경우 예매가 불가능하도록 구현
4-1. 비정상적인 접근 예시
http://localhost:8080/fairtennis/tennis/reserve?center=KSS&court=3&datetime=2023-07-09T14%3A13
위 경로로 접근하였을 경우 출력할 페이지(unauthorized.jsp)

4-2. 정상적인 접근 예시
- 테니스장 메인 페이지(
index.html) 접속 - 예약 가능한 코트 조회 링크를 클릭하여 예매 페이지(
courtList.jsp)로 이동 - 마우스로 직접 날짜와 센터를 선택 후 예약하기 버튼을 클릭하여 예매
예매 버튼을 클릭하여 정상적으로 접근하였을 경우 출력할 페이지(success.jsp)
