Skip to content

에어갭 및 오프라인 배포

모든 스타일시트, 스크립트, 폰트, 아이콘이 자체 설치본에서 제공됩니다. 로그인과 가입 페이지를 포함한 14개 템플릿 전체에서 실측 62건 요청, 외부 0건으로 검증되었습니다.

Potato는 모든 스타일시트, 스크립트, 폰트, 아이콘을 자체 설치본에서 제공합니다. 인터넷으로 나가는 경로가 없는 장비에서도 빠른 회선을 가진 장비와 똑같은 인터페이스가 표시됩니다. 실제로 렌더링한 주석 페이지에서 검증한 결과는 62건 요청, 외부 0건이며, 로그인과 가입 페이지도 포함됩니다.

이는 보안이 요구되는 연구 환경, 임상 현장, 현장 배포, 그리고 엄격한 프록시 뒤에 있는 모든 장비에서 중요합니다. 가용성의 속성인 동시에 프라이버시의 속성이기도 합니다.

설치본에서 제공되는 자산

Fabric.js(이미지 캔버스), jQuery, Bootstrap, Font Awesome, 인터페이스 서체인 Outfit, three.js(포인트 클라우드), OpenSeadragon(딥 줌), d3, Peaks.js(오디오 파형), PDF.js, 그리고 Potato 자체의 모든 CSS와 JavaScript입니다.

이 중 둘은 장식이 아니라 필수입니다. jQuery가 없으면 스팬 주석이 전혀 작동하지 않습니다. Fabric.js가 없으면 이미지 캔버스가 초기화되지 않아, 그리기 도구는 표시되지만 아무것도 그릴 수 없습니다.

폰트가 프라이버시 유출이었다

styles.css는 Google Fonts를 @import하는 줄로 시작했습니다. 오프라인에서 깨지는 것을 넘어, 이는 페이지가 로드될 때마다 모든 주석자의 IP 주소와 User-Agent를 제3자에게 보내고 있었다는 뜻입니다. 그것도 데이터를 자기 인프라 밖으로 내보내지 않으려고 직접 호스팅하는 도구에서 말입니다.

이 문제는 이전 세 차례의 에어갭 감사를 통과했습니다. 모든 검사가 템플릿 안의 <script src><link href>를 확인했는데, 스타일시트 내부의 @import는 그 어느 쪽도 아니기 때문입니다. 해당 서체는 이제 SIL Open Font License 아래 함께 포함되어 있습니다.

로그인과 가입 페이지에 있던 제3자 파비콘도 같은 이유로 제거했습니다. 사용자가 자격 증명을 입력하는 페이지에서 다른 회사의 서버로 요청이 나가는 상황이었기 때문입니다.

14개 템플릿 전체 적용

적용 범위에는 로그인, 가입, 비밀번호 재설정, 오류 페이지가 포함됩니다. 에어갭 감사에서 가장 확인하지 않기 쉬우면서, 문제가 되면 가장 크게 영향을 주는 페이지들입니다.

포함된 파일은 체크섬으로 검증합니다

함께 포함되는 모든 파일은 해당 CDN이 공개한 해시와 대조되며, 일치하지 않으면 거부됩니다. 포함된 파일은 커밋되므로, 검증되지 않은 다운로드는 그 릴리스의 모든 사용자에게 그대로 전달되기 때문입니다.

두 가드의 허용 목록은 모두 비어 있으며, 항목이 아무것과도 일치하지 않게 되면 가드는 실패합니다. 따라서 예외가 조용히 영구화될 수 없습니다.

"에어갭"의 정확한 의미

애플리케이션 자체는 네트워크가 필요하지 않습니다. 모델은 한 번만 옮기면 됩니다. 연결된 장비에서 potato download-models를 실행한 뒤 디렉터리를 복사하십시오. OpenAI, Anthropic, Gemini처럼 설정한 호스팅형 AI 엔드포인트는 당연히 외부로 나가는 경로가 필요합니다.

그러므로 정확한 표현은 "설정 없이 에어갭"이 아니라 "가중치가 장비에 올라가고 나면 에어갭" 입니다.

관련 문서