Bar still missing in Chrome or Edge? Update to version 3.1.127 or later to fix it — your browser usually does this on its own, but you can force it now.Bar still missing? Update to 3.1.127 or later to fix it. How to update now

Second Bookmark Bar

Chrome 확장 프로그램은 설명이 아니라 매니페스트로 판단하세요

저는 Chrome 확장 프로그램을 운영합니다. 이 확장 프로그램의 매니페스트는 identity 권한, 제 Supabase 백엔드로 범위를 한정한 호스트 권한, 그리고 그 둘보다 더 중요하게, 방문하는 모든 http://와 https:// 페이지에서 실행되는 콘텐츠 스크립트를 요청합니다 — 실제로 Chrome의 가장 광범위한 “방문하는 웹사이트의 모든 데이터 읽기 및 변경” 경고를 만드는 건 백엔드 호스트 권한이 아니라 바로 이것입니다. 이 사이트의 다른 글에서 이게 전부 무엇을 위한 것인지 전체 내역을 정리해두었습니다. 여기서 다시 먼저 밝히는 이유는, “확장 프로그램은 홍보 문구가 아니라 매니페스트로 판단하라”는 게 이 글의 논지 전부인데, 그 논지가 자기 자신을 향한 검증을 먼저 통과해야만 그런 주장을 할 자격이 생기기 때문입니다.

그런 전제 위에서: 매니페스트를 실제로 읽는 방법, 그리고 사람들이 매일 설치하는 확장 프로그램 여덟 개에 이 방법을 적용했을 때 드러나는 것, 그리고 제 확장 프로그램은 어디에 위치하는지에 대한 자기비판적인 시각을 함께 살펴보겠습니다.

어떤 확장 프로그램이든 매니페스트를 직접 읽는 방법

Chrome Web Store의 설치 안내는 요약본이고, 매니페스트가 원본입니다. 둘을 비교하기 전에 알아둘 만한 것들이 있습니다.

  • permissions, host permissions, content scripts는 각각 독립적으로 똑같이 광범위한 경고를 유발할 수 있는, 서로 다른 세 가지 선언입니다. 확장 프로그램이 permissions 배열만 보면 범위가 좁아 보여도, 매칭 범위가 넓은 content_scripts 블록이나 <all_urls>로 지정된 host_permissions 항목 때문에 방문하는 모든 페이지에서 실행될 수 있습니다. 설치 안내가 마침 먼저 요약해서 보여주는 하나만 보지 말고 셋 다 읽으세요.
  • 선언된 권한은 상한선이지, 실제 사용을 보장하는 게 아닙니다. 일부 확장 프로그램은 매니페스트에 넓은 접근 권한을 선언해두고도 실제로는 더 좁은 기본 동작을 제공하며, 그 기능이 필요한 옵션을 명시적으로 켰을 때만 전체 범위를 사용합니다. 이건 그냥 넘겨짚지 말고 실제로 확인해볼 가치가 있는 진짜 차이이고, 반대 방향으로도 적용됩니다. 서류상 좁아 보이는 매니페스트도, 갖고 있는 접근 권한으로 알아둘 만한 뭔가를 하고 있을 수 있습니다.
  • optional_permissions와 optional_host_permissions는 설치 시점에 요청하는 동일한 접근 권한과는 의미상 다른 이야기입니다. 특정 기능을 클릭하는 순간에만 Chrome이 요청하는 권한은, 최종적으로 같은 API 접근을 부여하더라도 모든 설치에 묶여 있는 동일한 권한보다 더 작고 더 책임 소재가 분명한 요청입니다.
  • Manifest V3는 위험의 한 카테고리 전체를 구조적으로 차단합니다. 확장 프로그램은 더 이상 런타임에 원격 서버에서 임의의 JavaScript를 가져와 실행할 수 없습니다. 이건 이제 단순한 권고 사항도 아닙니다. Chrome은 2025년에 Manifest V2 확장 프로그램 실행을 중단했고, Google은 2026년 8월 31일에 남은 것들을 Web Store에서 완전히 삭제할 예정입니다. V2에서 마이그레이션하지 않은 확장 프로그램은 이제 “한 번 더 살펴볼 만한” 정도가 아니라, 이미 실행되지 않거나 곧 사라질 확장 프로그램입니다.
  • 오픈소스라면 이 글을 포함한 어떤 요약도 말고, 저장소의 실제 manifest.json을 읽으세요. 클로즈드 소스라면 Chrome Web Store 등록 페이지 자체의 권한 공개 정보가 여러분이 볼 수 있는 가장 신뢰할 만한 공개 정보입니다. 소스 코드만큼 정밀하지는 않지만, 그 위에 적힌 기능 설명보다는 여전히 정확합니다.
  • 기기에서 무엇이, 어떤 조건에서 빠져나가는지 정확히 명시한 개인정보 처리방침이, “서비스 개선을 위해 정보를 수집할 수 있습니다” 식의 문구보다 훨씬 가치 있습니다. 모호한 정책은 그 확장 프로그램이 실제로 얼마나 좋은지와 무관하게 형식적인 문구일 뿐입니다.
  • 이건 어느 것도 한 번만 확인하고 끝낼 일이 아닙니다. 이미 설치한 뒤에도 확장 프로그램의 소유권이 바뀔 수 있고, 새 소유자는 같은 이름과 같은 설치 기반 위에 새 기능을 담은 업데이트를 배포할 수 있습니다. 이게 실제로 어떤 모습인지는 아래에서 더 다루겠습니다.

실제 확장 프로그램 여덟 개에 적용해보면

각각의 실제 매니페스트를 가져왔습니다. 오픈소스인 경우 프로젝트 자체의 GitHub 저장소에서, 아니라면 Chrome Web Store 자체의 권한 공개 정보에서 가져왔습니다.

확장 프로그램권한 / 호스트 접근광범위한 접근?정당한가?
uBlock Origin LiteactiveTab, alarms, declarativeNetRequest, offscreen, scripting, storage, unlimitedStorage, userScripts; host_permissions: <all_urls>선언은 넓지만 기본값은 좁음정당함, 대부분 기본값에서는 사용되지 않음. <all_urls>는 선택적인 “Optimal”과 “Complete” 필터링 모드의 상한선입니다. 기본값인 “Basic” 모드는 순수하게 declarativeNetRequest의 정적 규칙 세트로만 차단하며, 사이트별로 직접 모드를 올리지 않는 한 페이지 콘텐츠를 읽지 않습니다
BitwardenactiveTab, alarms, clipboardRead, clipboardWrite, contextMenus, idle, offscreen, scripting, sidePanel, storage, tabs, unlimitedStorage, webNavigation, webRequest, webRequestAuthProvider, notifications; host_permissions: https://*/*, http://*/*예예. 자동 완성 기능은 지금 있는 페이지의 입력 필드를 읽지 않고는 작동할 수 없고, 그 페이지가 어디든 될 수 있습니다
ClearURLs<all_urls>, webRequest, webRequestBlocking, tabs, downloads, contextMenus, webNavigation, storage, unlimitedStorage (여전히 Manifest V2)서류상으로는 예이건 “사람들이 매일 설치하는” 사례가 아니라 경고성 사례입니다. URL 재작성이라는 기능은 여전히 실행되고 있었다면 이 접근 권한을 정당화했을 것입니다. 하지만 이건 Manifest V2 확장 프로그램이고, 관리자는 V3 마이그레이션 요청을 “계획 없음”으로 명시적으로 닫아버렸으며, Chrome은 이미 실행을 중단했고, Google은 이 글이 올라간 지 열흘 뒤인 2026년 8월 31일에 남은 MV2 확장 프로그램들을 Web Store에서 삭제합니다
Privacy Badger (EFF)alarms, declarativeNetRequest, privacy, scripting, storage, tabs, webNavigation, webRequest; host_permissions: <all_urls>예예. 서로 관련 없는 사이트들에 걸쳐 어떤 도메인이 나타나는지 관찰해서 제3자 트래커를 탐지하는 것 자체가 메커니즘이지, 부수 효과가 아닙니다. (독자로서 알아둘 점: EFF 자체 GitHub 소스 파일은 실제 배포된 게 아니라 빌드되지 않은 MV2 템플릿입니다. 위 행은 저장소가 아니라 실제 운영 중인 Chrome Web Store 바이너리에서 가져온, 실제 배포된 Manifest V3 권한입니다.)
Dark Readeralarms, fontSettings, scripting, storage; host_permissions: *://*/*예예. 페이지의 CSS를 반전하거나 어둡게 다시 쓰는 기능은 일부 페이지에서만 작동하는 버전이 존재할 수 없습니다
GoFullPageactiveTab, scripting, storage, unlimitedStorage; optional_host_permissions: <all_urls>, file://*/*선언은 넓지만 옵트인하는 일에 맞습니다. 설치 시점에 부여되는 권한은 좁습니다. activeTab은 실제로 캡처를 트리거한 탭만 건드립니다. 더 넓은 접근 권한이 매니페스트에 존재하지만 optional_host_permissions 뒤에 숨어 있어서, iframe이 포함된 페이지처럼 특정 캡처 시나리오가 실제로 요청할 때만 Chrome이 이를 부여하며, 설치 시점에는 부여되지 않습니다
Vimiumtabs, bookmarks, history, storage, sessions, notifications, scripting, favicon, webNavigation, search; host_permissions: <all_urls>예예. 모든 페이지에 대한 키보드 기반 내비게이션은 어디에서나 실행돼야 하고, bookmarks/history 접근은 별도로 덧붙인 기능이 아니라 북마크나 이전 페이지로 점프하는 자체 키보드 명령을 뒷받침합니다
OneTabtabs, activeTab, scripting, storage, unlimitedStorage, contextMenus, favicon (클로즈드 소스; 1차 GitHub 소스가 아니라 실제 운영 중인 Chrome Web Store 매니페스트를 기준으로 함)넓은 호스트 접근은 없지만 아예 없는 건 아님하는 일에 맞지만, 실제로 꼭 읽어봐야 할 권한이 하나 있습니다. tabs는 직접 조작하는 탭 하나가 아니라 열려 있는 모든 탭의 URL과 제목을 부여하는데, 이게 바로 기능 설명만으로 넘겨짚지 않고 이런 방법이 드러내려는 종류의 사실입니다
Second Bookmark Bar (제 것)activeTab, bookmarks, storage, favicon, identity, alarms; 선택적 tabGroups(설치 시가 아니라 런타임에만 요청); 하나의 Supabase 도메인으로 범위를 한정한 호스트 권한; document_start 시점에 http://*/*와 https://*/*에서 실행되는 콘텐츠 스크립트예대체로 정당하지만, 콘텐츠 스크립트 범위는 실재하는 문제입니다. 이건 바를 그리고 드래그된 요소의 세부 정보를 읽는 데 쓰이며, 앞의 bookmarks/storage/activeTab 권한보다 실제로 더 넓습니다. 이게 이 확장 프로그램이 이 표에서 최상단을 차지하지 않는 정직한 이유입니다
<all_urls>, 광고나 분석 SDK 번들, 복사-붙여넣기한 개인정보 처리방침을 가진 가상의 무료 확장 프로그램<all_urls> 및 제3자 SDK 도메인으로의 아웃바운드 호출예아니오, 설계상 그렇습니다. 이건 특정 제품이 아니라 경계해야 할 형태입니다. 명백히 필요로 하는 기능도 없이 넓은 접근 권한을 가지고, 설명에는 전혀 언급되지 않는 네트워크 호출을 통해 수익을 내며, 공개 문서라기보다 형식적인 문구에 가까운 정책으로 뒷받침됩니다

표에 묻어두지 말고 짚어볼 만한 점이 몇 가지 있습니다. OneTab과 GoFullPage는 여기서 호스트 접근이 가장 적고, 둘 다 자유롭게 접근할 수 있는 사이트를 단 하나도 요청하지 않는데, 이건 우연이 아닙니다. 탭 목록 도구와 스크린샷 도구는 사용자가 직접 조작하는 것 이상으로 페이지 콘텐츠를 볼 필요가 정말로 없으므로, 요청하지 않는 것입니다. 하지만 “접근이 가장 적다”는 게 “읽어볼 만한 권한이 없다”는 뜻은 아닙니다. OneTab은 여전히 tabs를 선언하는데, 이는 클릭한 탭 하나가 아니라 한 번에 열려 있는 모든 탭의 URL과 제목을 넘겨주며, 이건 이 목록에서 가장 좁아 보이는 도구에 대해서도 알아둘 만한 실제적이고 구체적인 사실입니다. (탭이 쌓이는 게 실제로 해결하려는 문제라면, 둘 중 무엇을 고를지 고민 중이시라면 OneTab과 Second Bookmark Bar를 비교한 글도 써두었습니다.) Bitwarden, Privacy Badger, Dark Reader, Vimium은 모두 설치 시점부터 넓은 권한을 가지며 모두 정당합니다. 각자가 하는 일이 구조적으로 모든 페이지를 봐야 하기 때문입니다. 자동 완성, 사이트 간 트래커 탐지, CSS 재작성, 범용 키보드 캡처는 웹의 일부에서만 작동하는 버전이 존재할 수 없습니다. ClearURLs도 매니페스트 근거만 놓고 보면 같은 그룹에 속할 것입니다. URL 재작성은 모든 URL을 봐야 하니까요. 다만 그 근거가 이제는 대부분 이론적일 뿐이라는 점을 알아둘 필요가 있습니다. Manifest V2에서 벗어나지 못했고, Chrome은 2025년에 MV2 확장 프로그램 실행을 중단했습니다.

uBlock Origin Lite가 가장 흥미로운 사례이고, 제가 처음 읽었을 때 잘못 판단했던 사례이기도 합니다. 이 매니페스트는 정말로 <all_urls>를 선언합니다. 예외 없이요. 하지만 이 선언은 대부분의 사용자가 절대 켜지 않는 선택적 모드들의 상한선일 뿐입니다. 기본으로 활성화되어 배포되는 “Basic” 모드는 순전히 declarativeNetRequest의 사전 컴파일된 규칙 세트로만 차단하며, 특정 사이트에서 필터링 수준을 명시적으로 올리지 않는 한 실제로 페이지 콘텐츠를 읽지 않습니다. 여기서 얻을 교훈은 “uBlock Origin Lite는 권한이 전혀 없다”가 아닙니다 — 그건 틀린 말일 겁니다. 교훈은, 매니페스트는 확장 프로그램이 할 수 있는 최대치를 알려줄 뿐이고, 그 최대치가 일상에서 실제로 의미가 있는지는 기본값으로 실제로 무엇을 하는지 확인해봐야 알 수 있다는 것입니다.

그리고 제 것이 있습니다. Second Bookmark Bar는 이 표에서 1등이 아니고, 그래서는 안 됩니다. 방문하는 모든 페이지에서 실행되는 콘텐츠 스크립트는 실재하는, 진짜 넓은 접근 권한입니다. 예외 없이요. “드래그했을 때만 요소를 읽는다”는 말을 아무리 해도 매니페스트가 선언하는 내용은 바뀌지 않습니다. 이건 제가 표의 다른 모든 확장 프로그램에 적용한 것과 같은 기준이니, 제 행에도 똑같이 적용해야 합니다. 그러지 않으면 이 글의 나머지는 권한 감사 탈을 쓴 마케팅에 불과합니다. 그 콘텐츠 스크립트가 갖고 있는 접근 권한으로 정확히 무엇을 하고 무엇을 하지 않는지에 대한 사례별 전체 설명이 궁금하다면 전체 안전성 글을 확인하세요. 개인이 아니라 회사를 대신해 이를 평가하는 중이라면, 그 용도로 작성한 보안 검토자용 공개 문서도 있습니다.

권한은 한 번만 확인하고 끝낼 일이 아닙니다

2026년 2월, 설치 수 약 7,000건인 “Google Lens” 스타일의 화면 검색 도구 QuickLens라는 Chrome 확장 프로그램의 소유권이 바뀌었습니다. 이 확장 프로그램은 처음 게시된 직후 제3자 확장 프로그램 마켓플레이스에 매물로 올라와 있었고, 2월 1일 무렵에는 다른 이름으로 운영하는 새 소유자가 생겼으며, 개인정보 처리방침도 연구자들이 거의 작동하지 않는 도메인이라고 묘사한 곳에 호스팅된 것으로 바뀌어 있었습니다. 2월 17일, MetaMask, Phantom, Coinbase Wallet 등 설치된 암호화폐 지갑을 탐지하고 이를 비우는 데 필요한 자격 증명을 가로채려는 코드가 추가된 새 버전이 배포되었습니다. 여러 보안 연구자와 매체가 이를 발견 즉시 소문이 아니라 문서화된 공급망 공격 사건으로 다뤘습니다.

이 사건에서 대부분의 사용자가 당시에 알아챘을 만한 매니페스트 변경은 전혀 없었습니다. 확장 프로그램의 설치 기반도, 이름도, 등록 정보도 그대로였습니다. 바뀐 건 누가 그 뒤에 있느냐, 그리고 새 소유자가 무엇을 배포하기로 선택했느냐였습니다. 이게 위에서 말한 모든 것의 정직한 한계입니다. 매니페스트를 읽으면 지금 이 순간, 현재 이를 통제하는 사람들이 확장 프로그램으로 무엇을 할 수 있는지 알 수 있습니다. 1년 뒤 누가 이를 통제할지, 그들이 무엇을 추가하기로 결정할지는 알려주지 않습니다. 설치 시점에 권한을 한 번 확인하는 건 합리적인 습관입니다. 그 확인이 영구적이라고 여기는 건 그렇지 않습니다.

회사 Chrome이 확장 프로그램을 차단한다면

회사의 Chrome 정책이 설치 안내를 보기도 전에 확장 프로그램을 통째로 차단한다면, 이런 감사는 아무 의미가 없습니다. 이는 정말로 위험한 매니페스트와는 별개의, 훨씬 더 흔한 상황입니다. 회색의 “조직에 의해 차단됨” 대화상자를 만난 적이 있다면, 그 차단이 실제로 무엇이고 설치 요청 흐름이 어떻게 작동하는지 정리해두었습니다. IT 관리자에게 뭔가를 승인해달라고 요청했을 때 관리자가 실제로 무엇을 보게 되는지도 포함해서요. 반대로 그 요청을 받는 입장에서, 개인이 아니라 팀을 위해 확장 프로그램을 승인할지 결정해야 한다면, 그 검토자를 위해 작성한 권한별 검토 문서가 바로 그 결정을 위해 만든 페이지입니다.

내 북마크 바에서 직접 써보기

Second Bookmark Bar는 무료로 설치할 수 있고, 기본적으로 사용자의 기기에서만 동작하며, 설정에는 1분 정도밖에 걸리지 않습니다.

Chrome에 추가 — 무료