바이브코딩 커뮤니티에서 html 미리보기를 보안 지적 없이 허용하는 법 (세션 토큰·자동 로그아웃·RLS·게스트 권한·티켓팅)
도름스는 바이브코딩 커뮤니티라 html 업로드/미리보기를 허용해놨더니 보안 경고가 뜨네요. 게시글에 html 파일을 첨부하면 바로 미리보기로 보여주게 해놨는데 그게 리스크가 없지 않더라고요. 지금은 수동으로 올려주신 html을 점검하면서 사용자 자유도를 높이고 있는데, html을 미리보기로 볼 수 있게 첨부하면서도 보안 지적을 받지 않을 방법이 있을까요? 샌드박스에 올리게 하면 된다고는 하는데 미리보기로 보여주고 싶어서 고민이에요.
선생님들의 답 2개
데이터를 빼내가는 종류의 해킹을 염두에 두고, '지적사항을 피한다' 정도의 전제로 보면 몇 가지가 도움이 될 것 같아요. [① 로그인 단 방어 - 세션 토큰/자동 로그아웃] 지금 도름스는 한 번 로그인하면 몇 시간이든 계속 유지되더라고요. 그러면 창을 꺼도 캐시 데이터에 '로그인된 상태'를 알리는 쿠키가 남아 있어요. 해커가 그 교사의 쿠키 상태를 문자열로 가져가서(사실상 복붙 수준) 도름스 페이지의 로그인 관련 코드에 붙여넣으면 마치 교사가 로그인한 것처럼 쓸 수 있어요(XSS). 그래서 '일정 기간 동안만 유효한 세션 토큰'을 지속적으로 갱신하는 방식으로, 나이스가 일정 시간 동작 없으면 자동 로그아웃되는 것처럼, 일정 시간 동안 키보드·마우스 같은 외부 입력이 없으면 세션 토큰을 만료시켜 로그아웃 처리되게 하면 좋아요(50분 수업·10분 쉬는시간 워크플로우면 30분 정도가 적당할지도요). [② 구조적 방어 - RLS(행 수준 보안)] 데이터를 행 단위로 저장·조회하는 구조면, 해커가 도름스에서 뭐 하나를 턴다고 할 때 미리보기로 올라와 있는 여러 앱 중 한 개만 딱 털어가게 됩니다. 멀티테넌트나 RLS가 없으면 도름스를 턴다는 게 전부를 턴다는 뜻인데, RLS라면 어떤 html에 접근하는 건 그 파일만 담긴 행에 접속하는 거라 그것'만' 털리는 것으로 정리돼요. (RLS 구현 시엔 anon 접근을 차단하고 authenticated 롤과 auth.uid() 함수로 인증된 사용자에게만 DB 접근이 가능하도록 정책을 설계해달라고 요청하는 것도 중요해요.) [③ 앱마다 인증 - 티켓팅 시스템] html 미리보기로 떠 있는 앱들은 각각 데이터 한 행을 차지하는데, 접근할 때마다 인증을 거치게 하는 거예요. 검증된 사용자가 앱 입장 키를 마스터(창욱쌤)에 요청 → 마스터가 세션 토큰이 유효한 시간 내의 계정이면 입장 코드를 자동 발급 → 발급받은 코드로 입장. 이게 '티켓팅 시스템'이라는 테크닉이에요. '티켓팅 시스템을 구현하려고 한다'는 맥락 하나 던져주고 질문을 이어가면 AI가 코드도 효율적으로 짜줄 거예요. [④ 로그인 없이 둘러보게 하려면 - guest 롤] 로그인 없이 들어온 계정을 guest로 지정하고, guest에는 RLS에서 SELECT(조회)만 허용하고 INSERT/UPDATE/DELETE(저장·수정·삭제)는 부여하지 않는 게 제일 좋아요. 마스터가 일방적으로 띄워주는 데이터는 볼 수 있지만 DB에서 빼내거나 수정·삭제하지는 못하게요. 급식을 예쁘게 세팅한 걸 볼 수는 있지만 주방에 들어가 재료를 훔쳐가지는 못하게 하는 격이죠.
RLS(행 수준 보안)는 이미 구축되어 있어요. 자동 로그아웃은 적용해야겠네요(교사 수업이 보통 60분 안쪽이니 60분 무입력이면 로그인이 끊기게요). 입장 키의 경우, 제 의도는 로그인 안 해도 둘러보게 해서 개방성을 높이려던 거라 보기 권한과 도름 주기까지만 열어뒀어요. 도름 주기는 IP당 1회고요(VPN 켜면 더 줄 수야 있지만 도름이 뭐라고 그렇게까지 할까 싶어 냅뒀어요). 여러분의 앱도 RLS 행 수준 보안은 반드시 구축하셔야 합니다!