클라이언트 쪽에서 new Date()를 사용해서 시간을 판단해도 될까?
Date 객체를 변경 시킨다면?
// 클라이언트 코드
setInterval(() => {
console.log(new Date());
}, 1000);
// 브라우저 콘솔창에 입력한 코드
const realDate = Date;
Date = class extends realDate {
constructor() {
super('2021-09-01T00:00:00');
}
};
Date 객체를 symbol을 사용해서 알아채지 못 하게 해볼까?
const 클라이언트는모르는변수 = Symbol('secret');
// 객체 생성
const 비밀객체 = {};
// 객체의 속성에 심볼 할당
비밀객체[클라이언트는모르는변수] = Date;
setInterval(() => {
console.log(new 비밀객체[클라이언트는모르는변수]());
}, 1000);
화면 기록 2023-11-23 오후 11.15.40.mov
다음과 같이 Date객체를 변경 못하게 숨기고 getTime으로 절대 시간을 얻으면 동시성 문제가 해결될까?
new Date는 인터넷이 끊겨도 돌아갈까?
결론
해킹
의 가능성이 있다.유저는 무슨 짓을 할 지 모르니 중요한 정보는 서버로 부터 받아오자