viewer.csslab.dev

브라우저 전용 도구가 지켜 주는 것과 지켜 주지 않는 것

그 페이지가 어디론가 보내는지에 달렸고, 그건 믿는 대신 확인할 수 있다. 브라우저에서만 도는 도구에는 입력을 받을 서버가 없다 — 파싱하는 자바스크립트가 이미 내 기계에 있고, 내용을 실어 나르는 요청이 없다. 가장 큰 위험은 그것으로 사라진다. 모든 위험이 사라지지는 않는다. 페이지는 내일 바뀔 수 있고, 브라우저 확장은 DOM 을 읽을 수 있으며, 느슨하게 다룬 토큰은 어차피 교체하는 것이 맞다.

"백엔드가 없다"가 구체적으로 무슨 뜻인가

정적 사이트는 있는 그대로 서빙되는 파일 묶음이다. 요청 본문을 기록할 애플리케이션 프로세스가 반대편에 없다. 요청 본문 자체가 없기 때문이다 — 파싱은 이미 내 탭에서 돌고 있는 자바스크립트가 한다.

확인하는 방법은 네트워크 패널이다. 개발자 도구를 열고 무언가를 붙여넣은 뒤 본다. 내용이 전송되고 있다면 그것을 실은 요청이 나타난다. 정말로 클라이언트에서만 도는 도구에는 그런 요청이 없고, 처음의 페이지·에셋 로드와 페이지 주소만 실어 보내는 분석·광고 호출만 있다.

이건 개인정보처리방침과 달리 확인할 수 있는 종류의 것이다. 약속은 의도에 대한 주장이고, 네트워크 패널은 실제로 일어난 일의 기록이다.

그래도 남는 것

페이지는 바뀔 수 있다. 확인한 버전이 다음 달에 불러올 버전과 같다는 보장이 없고, 정적 호스팅은 갱신이 아주 쉽다. 민감한 것이라면 그 확인을 영원히가 아니라 그 세션에 한해 유효한 것으로 다루는 편이 안전하다.

브라우저 안에서 도는 것은 무엇이든 붙여넣은 것을 읽을 수 있다 — 페이지 접근 권한이 있는 확장, 공용이거나 관리되는 프로필, 그리고 페이지가 제3자에게서 불러오는 스크립트. 클라이언트 전용 도구는 신뢰 경계를 내 기계로 옮길 뿐 없애지는 않는다.

클립보드와 브라우저 기록도 값이 남는 평범한 자리다. 공용 기계에서는 도구보다 그쪽이 더 문제다.

실무 규칙

만료됐거나 만들어 낸 값을 쓴다. 구조를 이해하려고 보는 JWT 는 아직 유효하든 아니든 똑같이 풀리므로, 가능하면 이미 만료된 것을 쓴다.

확신이 없는 곳에 붙여넣은 것은 교체한다. 토큰과 API 키에는 값싼 일이고, 실제로 문제가 됐던 경우에만 비싸다.

교체할 수 없는 비밀이라면 — 서명 키, 보존 의무가 걸린 고객 데이터 — 어떻게 만들어졌든 웹 도구를 아예 쓰지 않는다. 그 질문이 생기지 않는 로컬 도구를 쓴다.

서명을 검증해 주거나 무언가를 풀어 준다는 도구는 더 조심한다. 그런 기능에는 값만이 아니라 키가 필요하기 때문이다. 이 사이트의 JWT 도구가 일부러 서명을 검증하지 않는 이유가 그것이다 — 그 기능은 결코 붙여넣으면 안 되는 바로 그것을 붙여넣게 만든다.

관련 도구

이 도구가 따르는 규격

고친 날 2026-09-05