라이브 읽기 전용 데모
포털을 공개 라이브 데모로 운영할 수 있습니다. 누구나 시드된 데모 계정으로 로그인해 실제 프로젝트·스캔·취약점·라이선스·SBOM·보고서를 둘러볼 수 있지만, 모든 쓰기 작업은 비활성화되며 데이터셋은 매일 밤 깨끗한 상태로 초기화됩니다.
두 가지 독립적인 구성 요소로 이루어집니다.
DEMO_READ_ONLY읽기 전용 모드 (모든 배포).- 일일 자동 리셋 (데모 호스트의 systemd 타이머가 리셋 스크립트를 백엔드 컨테이너 안에서 실행).
1. 읽기 전용 모드 (DEMO_READ_ONLY)
백엔드 환경 변수를 설정합니다.
DEMO_READ_ONLY=true
(허용되는 truthy 값: 1, true, yes, on — 대소문자 무관. 요청 시점에
읽으므로, 값을 바꿀 때 재빌드 없이 프로세스 재시작만 하면 됩니다.)
활성화되면 단일 미들웨어가 API 전체에 정책을 강제하므로, 개별 엔드포인트가 정책을 우회할 수 없습니다.
- 읽기는 항상 통과 —
GET·HEAD·OPTIONS(마지막은 CORS preflight 유지용). - 쓰기는 기본 차단 — 모든
POST·PUT·PATCH·DELETE(및 기타 메서드)는 허용 목록(allow-list) 에 없으면 거부됩니다. - 허용 목록은 데모에 꼭 필요한 인증 흐름뿐입니다:
POST /auth/login,POST /auth/refresh,POST /auth/logout. 그 외 — 회원가입, 비밀번호 재설정· 변경, 프로젝트 생성, 스캔 트리거, 승인, 설정, 웹훅, 파일 업로드 — 는 모두 차단됩니다.
차단된 요청은 Content-Type: application/problem+json 의 RFC 7807 403 을
받습니다.
{
"type": "urn:trustedoss:problem:demo-read-only",
"title": "Read-only demo",
"status": 403,
"detail": "This is a read-only live demo. Creating, updating, or deleting data is disabled. …",
"instance": "/v1/projects",
"demo_read_only": true
}
우회 방지
이 가드는 차단 목록이 아니라 허용 목록입니다. 나중에 추가되는 변이
엔드포인트는 별도 수정 없이 자동으로 차단됩니다. 허용 목록 비교 전에 경로를
정규화(역슬래시 변환, ./.. 세그먼트 해석, 끝 슬래시 제거)하므로
/v1/projects/../auth/login 같은 트래버설로 쓰기 경로를 허용 목록에 끼워 넣을 수
없습니다. HTTP 메서드는 대소문자 무관으로 비교하고 허용 목록은 (메서드, 경로)
쌍을 키로 쓰므로, 비정상 메서드가 허용된 경로에 편승할 수 없습니다.