하루의 시작과 끝을 지역 규칙으로 정해, 한도와 집계의 경계를 고정합니다.
오늘이 언제인지는 서버가 아니라 사용자의 달력이 정합니다. 실행 환경은 세계 표준시로 도는 경우가 많아서, 호스트 시각을 그대로 쓰면 자정부터 아침까지의 기록이 전날로 들어가고 하루 한도가 운영자가 생각한 것과 다른 시각에 초기화됩니다. 고정된 시간 차를 더하는 방식은 한 지역에서만 맞습니다. 그래서 지역 규칙을 담은 시간대 데이터베이스에 직접 묻습니다.
하루의 시작과 끝을 지역 자정으로 정의해, 한도 창과 집계 구간이 같은 시각에 나뉘게 합니다.
지역의 시간 차는 계절에 따라 바뀌므로, 상수를 더하는 계산은 다른 지역에 옮겨 쓰는 순간 틀립니다.
끝을 다음 날의 시작으로 잡아, 경계에 걸친 기록이 양쪽 어디에서도 빠지지 않게 합니다.
아래 증명은 글로 된 설명이 아닙니다. 버튼을 누르면 이 서버가 지금 직접 계산합니다.
하루의 시작과 끝은 지역의 시간대 규칙이 정합니다. 24시간을 더해 다음 날을 구하지 않고 다음 날짜의 시작을 새로 계산하므로, 하루가 23시간이나 25시간인 날에도 경계가 맞습니다.
표준 문서에 실린 테스트 벡터를 그대로 넣어 같은 값이 나오는지 확인합니다.
하루 한도의 리셋 시각이 호스트 시간대를 따라가면 운영자가 생각하는 시각과 실제 리셋 시각이 어긋납니다. 한도는 걸려 있지만 풀리는 시점이 다릅니다. 실제로 한국 시각 0시부터 9시 사이의 기록이 전날로 집계되던 기간이 있었습니다.
막아야 할 입력을 실제로 넣고 거부되는지 확인합니다.
규격 원문을 먼저 실었습니다. 사례는 이 분야에서 실제로 보안이 뚫린 일을 다룬 자료입니다.
지역별 시간 차와 그 변경 이력의 정본입니다. 상수를 더하면 안 되는 이유가 여기 있습니다.
실행 환경이 시간대 규칙을 꺼내 주는 표준 경로를 정의합니다.
문자열로 정렬해도 순서가 맞는 날짜 표기의 기준입니다.
다음 단계
하루 한도와 일별 집계를 쓰는 소비 시스템에 연결하고, 실행 환경의 시간대를 바꿔도 경계가 같은지 확인합니다.