내 파일이 업로드되지 않는지 확인하는 법
이런 사이트는 하나같이 프라이버시를 지킨다고 하는데, 그걸 실제로 어떻게 확인하나요?
올바른 전제에서 출발하기
마케팅 페이지에 적힌 프라이버시 약속은 증거가 아닙니다. 자물쇠 아이콘도, 배지도, 개인정보 처리방침의 문장 하나도 마찬가지입니다. 이들은 의도를 서술할 뿐이고, 여러분이 알고 싶은 것은 실제 동작입니다. 다행히 동작은 관찰할 수 있습니다. 모든 브라우저에는 페이지가 무엇을 보내는지 그대로 보여 주는 도구가 들어 있고, 그것을 읽는 데 개발자일 필요는 없습니다.
이 점검을 이 사이트에 해 보십시오. 전에 쓰던 사이트에도 해 보십시오. 요점은 다른 주장을 믿으라는 것이 아니라, 주장을 믿어야 할 필요 자체를 없애는 것입니다.
점검 하나: 네트워크 패널 지켜보기
- 개발자 도구를 엽니다. 대부분의 데스크톱 브라우저에서는 F12, Ctrl+Shift+I 또는 Cmd+Option+I입니다.
- 네트워크 탭을 선택하고 기록이 켜져 있는지 확인합니다.
- 페이지를 새로 고친 다음 목록을 지워 빈 기록에서 시작합니다.
- 파일을 선택하고 작업을 실행합니다.
- 크기순으로 정렬하거나, 메서드 열에서 POST와 PUT 요청을 찾습니다.
찾아야 할 것은 페이로드 크기가 파일 용량과 비슷한 요청, 그리고 지금 보고 있는 사이트가 아닌 호스트로 나가는 모든 요청입니다. 로컬 도구라면 자기 코드를 받아 오는 요청, 즉 스크립트, 스타일시트, WebAssembly 모듈, 경우에 따라 모델 파일을 받는 요청만 보이고, 작업이 도는 동안에는 아무것도 나타나지 않습니다. 업로드하는 도구라면 버튼을 누르는 순간 수 MB를 실어 나르는 요청이 보입니다.
점검 둘: 네트워크를 끊어 보기
가장 강력한 점검이고, 전문 지식이 전혀 필요 없습니다. 페이지를 평소대로 불러오고, 필요한 엔진이 캐시되도록 도구를 한 번 사용한 다음 연결을 끊습니다. 비행기 모드를 켜거나, Wi-Fi를 끄거나, 개발자 도구의 오프라인 전환 기능을 쓰면 됩니다. 그 상태로 파일을 처리해 보십시오.
작업이 완료된다면, 처리는 여러분의 컴퓨터 말고 다른 어디에서도 일어났을 수 없습니다. 논쟁할 여지가 없습니다. 실패하거나 멈춘다면 처리 과정의 어딘가가 서버를 필요로 한 것입니다. 아직 캐시되지 않은 모델 파일처럼 정당한 이유일 수도 있지만, 이제 어느 부분인지 물어봐야 한다는 사실을 알게 됩니다.
점검 셋: 콘텐츠 보안 정책 읽기
콘텐츠 보안 정책은 사이트가 보내고 브라우저가 강제하는 헤더입니다. 이 정책의 connect-src 지시어는 페이지가 연결을 열 수 있는 목적지를 나열합니다. connect-src가 사이트 자신의 오리진으로만 한정되어 있다면, 페이지의 코드가 무엇을 시도하든 브라우저가 다른 곳으로 무언가를 보내려는 시도를 직접 차단합니다.
확인하려면 네트워크 탭을 열고 문서 요청, 보통 첫 번째 행을 클릭한 다음 응답 헤더에서 Content-Security-Policy를 찾아보십시오. 외부 호스트 없이 connect-src 'self'만 들어 있는 정책은 약속이 아니라 브라우저가 강제하는 실효성 있는 제약입니다.
각 점검이 증명하는 것
| 점검 | 증명하는 것 | 포괄하지 못하는 것 |
|---|---|---|
| 네트워크 패널 | 이번 세션에서 이 페이지가 보낸 것 | 다른 코드 경로, 이후 버전의 사이트, 또는 지켜보기를 멈춘 뒤에 나간 요청 |
| 오프라인 시험 | 처리 자체가 로컬에서 실행된다는 사실 | 무언가 대기열에 쌓였다가 다시 연결되는 순간 전송되는지 여부 |
| 콘텐츠 보안 정책 | 브라우저가 애초에 연결을 허용하는 범위 | 사이트 자신의 오리진을 포함해 정책이 허용하는 모든 것 |
| 소스 코드 읽기 | 배포된 코드에 무엇이 들어 있는지 | 품이 든다는 점, 그리고 사이트가 바뀔 때마다 다시 해야 한다는 점 |
네 가지를 함께 쓰면 강력합니다. 하나씩만 보면 저마다 빈틈이 있고, 한 가지 점검으로 이 문제가 끝난다고 말하는 사람은 지나치게 단순화하고 있는 것입니다.
로컬 도구가 아니라는 신호
- 기기 성능과 무관한 속도로 움직이는 진행 표시줄. 빠른 노트북에서나 오래된 휴대폰에서나 똑같이 매끄럽게 흘러갑니다.
- 결과가 브라우저에 이미 들어 있는 파일이 아니라, 그들의 도메인에 있는 다운로드 URL 링크로 전달되는 경우.
- 몇 시간 뒤 서버에서 파일을 삭제한다는 안내 문구. 그 문장은 파일이 거기 있었다는 자백입니다.
- 대기열이나 이용 횟수 제한. 여러분 자신의 프로세서에는 다른 사람들과 공유하는 대기열이 없습니다.
- 네트워크를 끊었을 때 작은 첫 파일 하나만 처리되고 그다음부터 멈추는 도구.
검증의 한계
검증이 알려 주는 것은 시험한 날의, 시험한 그 버전에 관한 사실입니다. 사이트는 내일 바뀔 수 있습니다. 그래서 가장 중요한 점검은 구조에 관한 것들입니다. 엄격한 콘텐츠 보안 정책과 실제로 통과하는 오프라인 시험은 특정 릴리스에 대한 약속이 아니라 애플리케이션이 어떻게 만들어졌는지에 관한 성질이기 때문입니다.
이 목록의 어떤 점검으로도 닿을 수 없는 것이 두 가지 있습니다. 브라우저 확장 프로그램은 어떤 페이지의 내용이든, 거기에 불러들인 파일까지 포함해 읽을 수 있고, 어떤 사이트도 그것을 막을 수 없습니다. 운영체제는 여러분이 여는 모든 파일을 볼 수 있습니다. 그 점이 문제가 될 만큼 민감한 문서라면, 여러분이 통제하는 컴퓨터의 오프라인 소프트웨어에서 처리하고, 이 사이트를 포함한 모든 웹사이트를 그 일에는 맞지 않는 도구로 여기십시오.
관련 도구
출처
- W3C — Content Security Policy Level 3
- MDN — Content-Security-Policy connect-src
- Chrome DevTools — inspect network activity
- MDN — Firefox Network Monitor