給民眾使用者:你的健康資料安全嗎?
這份文件說明 NHI-FHIR Bridge 在資料安全上的設計與做法,盡量不用工程術語,方便評估是否適合自己使用。
最後更新:2026-07-21(依目前 v1.5.0 Manifest、popup、storage migration、後端安全 middleware 與 Docker 設定核對)。
一句話結論
資料預設只在你自己的電腦內處理;Bridge 不會把資料傳到開發者的伺服器,也不會自行送進 AI。
(選用例外:你可主動按「在 MediPrisma 查看」並在 Chrome 權限提示中允許 mediprisma.tw,此時目前完整 FHIR Bundle 會直接交給該外部網站。拒絕權限就不會送出,仍可下載。MediPrisma 的 AI 問答是否再把資料送到雲端,依該第三方服務自己的政策與你的操作,詳見後段。)
1. 資料路徑
(健保署) (你的瀏覽器) (你明確選的去處)
健康存摺 ───► NHI-FHIR Bridge ───► 下載到你電腦的下載夾
├─► 你自架的本機後端
└─► MediPrisma(按鈕+網站授權後)
- 預設下載模式沒有任何後端伺服器參與
- Bridge 是跑在瀏覽器內的轉換工具,跟健康存摺分頁互通
- 你可以下載檔案;也可在明確授權後直接在 MediPrisma 查看
直接帶入不會把資料塞在網址,也不經 Bridge 開發者的伺服器;但交給 MediPrisma 後就是第三方服務的資料處理範圍(見後段說明)。
2. Bridge 不會做的事
| 不做的事 | 對你的意義 |
|---|---|
| 不把資料傳到開發者伺服器 | 預設下載模式只在瀏覽器處理;進階模式的後端由你自行架設與控制 |
| 不接 AI / ChatGPT / Gemini | 程式碼裡沒有任何 AI 相關 library。轉換邏輯是純粹的規則對應 |
| 不收集使用統計 (telemetry) | 沒有寫任何收集程式,所以也讀不到誰裝了、用了幾次 |
| 不要求註冊帳號、不要求 email | 沒有 login、沒有 cookie |
| 不接觸健康存摺密碼 | Bridge 不會出現在登入畫面,密碼是你在健保署網站直接輸入 |
| 不同步資料到 Google 帳號 | 自動偵測到的性別 / 生日只存瀏覽器本機,不會跨裝置同步 |
| 下載一律走「另存新檔」對話框 | 每次下載都會跳對話框讓你選位置 + 確認檔名,不會在背景靜默落地 |
3. Bridge 內建的保護機制
| 保護 | 對應的情境 |
|---|---|
暫存資料只放在瀏覽器本機儲存區(chrome.storage.local) | 只存在你自己的電腦。誠實說明:關閉瀏覽器不會自動清除(v0.14 起,影像資料較大改放此區),靠下面幾種機制清除 — 暴露時間最多約 1 小時的 Chrome 執行時間,跟你下載到電腦的 .json 檔屬於同一級的保管問題 |
| 下載後仍可繼續使用 | 下載不會消耗瀏覽器內的暫存,因此仍可再次下載或在 MediPrisma 查看;點擊 popup 上的「移除」會直接清除當次暫存 |
| 1 小時自動清掃 | 暫存超過 1 小時就清掉,無論是否曾下載(Chrome 執行期間每 10 分鐘檢查一次;瀏覽器重開、擴充功能更新時也會檢查)。下一次同步也會直接覆寫舊暫存 |
| Sync 期間暫存的 NHI session token | 僅存本機、只用於背景影像查詢;30 分鐘 TTL,影像輪詢結束/逾時/登出即刪除 |
| 身分資料落地一律半遮罩(2026-07-11 起,去識別開啟時) | 瀏覽器儲存區裡的病人身分(自動偵測的姓名/身分證/生日)只保存半遮形態(F12345XXXX/郭O新/僅年份);完整值只在同步當下的記憶體中使用,不落地。升級時會自動把舊版留下的完整值改寫成半遮形態 |
| 隔離其他瀏覽器擴充功能 | 其他擴充功能無法假冒身份取得 bridge 的資料 |
| 下載一律走「另存新檔」對話框 | 每次下載都會跳對話框確認儲存位置 + 檔名 |
| MediPrisma 採選用網站權限 | 只有你按「在 MediPrisma 查看」時 Chrome 才要求 mediprisma.tw 權限;拒絕就不送資料,仍可下載。程式也只允許獨立匯入首頁,若分頁轉到 SMART launch/callback 會停止傳送 |
| 切換病人時清掉前一人的暫存 | 在健康存摺切換不同人(偵測到不同身分證)會觸發暫存清除,多人共用同一瀏覽器不會混 |
| 升級時清理舊版殘留 | 新版安裝時會掃掉前版可能留下的暫存 |
4. 透明度與可驗證性
對於「怎麼確認目前的資料處理方式」的疑問,以下資訊會持續公開在 mediprisma.tw:
| 公開資訊 | 連結 |
|---|---|
| 給民眾的安全說明 | mediprisma.tw/nhi-fhir-bridge/security-for-users |
| 隱私權政策 | mediprisma.tw/nhi-fhir-bridge/privacy — 雙語完整版 |
| 安全弱點通報窗口 | 寄信至 voho0000@gmail.com,主旨請註明「NHI-FHIR Bridge 安全通報」 |
| 權限要求清單 + 為何需要 | 本頁與隱私權政策均完整列出 |
| 政策更新紀錄 | 兩頁頁首會標示最後更新日期 |
如需進行程式碼層級的安全審閱,請透過上述 email 聯絡。
5. 使用上的小提醒
| 提醒 | 說明 |
|---|---|
| 下載的 JSON 檔案 | 內容是完整的個人健康紀錄,存放位置建議跟其他敏感檔案一樣處理 |
| 公共電腦上使用 | 網咖、圖書館電腦、借來的筆電都可能讓旁人看到畫面,建議在自己的裝置上使用 |
| 健保署登入 | Bridge 不接觸健保密碼。登入安全由健保署網站本身負責 |
| 「在 MediPrisma 查看」與 AI 問答 | 按「在 MediPrisma 查看」並授權後,完整 FHIR Bundle 會直接進入該第三方網站的匯入流程;Bridge 開發者收不到。該網站如何保存、視覺化或對外傳輸由 MediPrisma 當時的功能與政策決定;若使用 AI,資料可能送往其選用的雲端供應商。請先閱讀 MediPrisma 的最新隱私政策;只想下載檔案可拒絕網站權限 |
6. 常見疑慮 Q&A
Q1: 我裝了 bridge,會不會被當成「使用者授權給開發者用」? 不會。Bridge 是「裝在你電腦上幫你做事」的工具,跟 line 的對話 / 通訊軟體不一樣 — 我們收不到任何東西。
Q2: 我能不能完全離線使用? 擴充功能本身可以離線,但你必須連線才能抓健康存摺(健保署 API 在雲端)。一旦資料到你瀏覽器,後續轉換與下載可以離線;在 MediPrisma 查看則需要連線到該外部網站。
Q3: Bridge 會呼叫哪些健保署服務? Bridge 只在你已登入的健康存摺分頁中,呼叫該網站本身提供給頁面的結構化 API。健保署仍會像一般網站操作一樣收到請求與既有 session 資訊;Bridge 不會繞過登入或存取你無權檢視的對象。
Q4: Bridge 升級到 1.0 / 2.0 後會不會改成收費 / 偷偷加 AI?
- 若新增資料收集、AI 或其他會改變資料流向的功能,會更新本頁與隱私權政策的「最後更新」日期
- 重大功能調整會在 Chrome Web Store 的版本說明中揭露
- Chrome 商店版會自動更新;若不接受新版的政策變更,可移除擴充功能
Q5: 安裝時 Chrome 跳出「讀取以及變更你在 myhealthbank.nhi.gov.tw 的資料」,這樣安全嗎? 這是 Chrome 對所有「能存取某網站」的擴充功能都會顯示的固定字眼 — 不是 Bridge 特別要求的,開發者也改不了這行字。它描述的是「這個權限技術上能做什麼」(網站存取權同時含讀與寫),不是「Bridge 實際做了什麼」。
實際上 Bridge **只「讀取」**你健康存摺的資料,在你電腦上轉成 FHIR 檔,從不修改健保署網站上的任何內容。Chrome 之所以保守地寫「以及變更」,是因為它無法逐一判斷每個擴充功能的實際行為,只能按權限的最大能力警告。若需程式碼層級的安全審閱,可透過本頁的安全通報信箱聯絡。
Q6: 為什麼按「在 MediPrisma 查看」會要求存取 mediprisma.tw? 這不是安裝時必須給的權限。只有你主動按「在 MediPrisma 查看」時才要求,用來在該網站的獨立匯入首頁執行 Bridge 隨套件提供的匯入程式,並把目前完整 FHIR Bundle 放入該頁的檔案輸入元件。你可以拒絕並改用下載;首次允許後權限可能保留,也可隨時從 Chrome 的擴充功能網站存取設定撤回。
7. 還在猶豫的話
可以考慮以下幾種方式:
- 繼續用健保署官網(功能較有限,但是最熟悉的環境)
- 請信任的工程師朋友檢查程式碼 — 核心檔案約 1 小時內可看完
- 先下載到電腦觀察 JSON 內容是否合理,確認後再決定要不要搭配 SMART App 使用
8. 通報問題
| 你要做什麼 | 怎麼做 |
|---|---|
| 發現安全漏洞(想私下通報) | 寄信給 voho0000@gmail.com,主旨請註明「NHI-FHIR Bridge 安全通報」 |
| 報告 bug | 寄信給 voho0000@gmail.com |
| 提建議或一般問題 | 寄信給 voho0000@gmail.com |
重點回顧:健康資料預設停留在你的瀏覽器內。只有你主動下載、上傳自架後端,或按「在 MediPrisma 查看」並允許網站權限時,才會前往你選的目的地;Bridge 開發者不會收到。第三方網站後續如何處理資料,應依其隱私政策判斷。
附錄:進階模式(本機伺服器 + Dashboard)
以下內容針對進階用戶(自架 Docker backend 搭配 Dashboard / 自己寫 SMART App)。一般使用「下載到電腦」即可,這段可以略過。
進階模式是什麼
擴充功能裡有個「⚙️ 進階設定 → 啟用本機伺服器模式」開關。打開後,你可以:
- 跑一個本機 Docker backend(FHIR Server),把多次同步累積起來
- 用 Dashboard (
http://localhost:3010) 瀏覽多個病人 - 一鍵 launch 自架的 SMART App 看資料
- 在
http://localhost:3010/sdk-converter上傳院所/廠商取得的完整 SDK JSON,下載 FHIR Bundle 與轉換報告;這條路徑只在本機後端記憶體處理,不會自動寫入資料庫
這需要你有基本的開發環境 — 會用 terminal、知道什麼是 Docker、能設定 backend URL。
進階模式專屬的安全防護
| 防護 | 解決什麼風險 |
|---|---|
| 主機只發布到 127.0.0.1 (loopback) | Docker Compose 的 port mapping 不對 LAN 開放;容器內為了讓 port mapping 可達會監聽 0.0.0.0 |
| Dashboard 防 CSRF(檢查 Origin) | 防止你開著 dashboard 時、被其他網頁偷觸發操作 |
| SMART App URL 必須是 https:// 或本機 | 防止輸入錯誤的 URL 把 launch token 送陌生網站 |
| FHIR PHI 端點走 API key 或 SMART OAuth2 + PKCE | Dashboard 由 server-side proxy 注入 key;外部 SMART App 使用 patient-scoped Bearer token |
| Patient.id 用 SHA-1 雜湊(不放原始身分證) | URL 路徑不會直接顯示身分證。誠實說明:未開啟去識別化時,這是身分證全碼的無鹽 SHA-1 — 身分證組合空間小,理論上可被離線暴力還原,所以未去識別化的 bundle 不應公開散布。開啟去識別化(v0.18.4 起)後,Patient.id 改由半遮後的身分證(如 F12345XXXX)計算雜湊,無法還原出全碼 |
/sync/*、匯入/匯出與 SMART launch context 需要 SYNC_API_KEY | 保護同步、管理與批次搬運路徑 |
/sdk/convert 需要 SYNC_API_KEY 且回應 Cache-Control: no-store | 防止未授權轉換與中介快取;來源 JSON 和轉換結果不寫入 SQLite |
| 未設 key 時 CORS 鎖在 loopback | 其他 Chrome 擴充功能、第三方網站即使在沒設 key 的模式下,也拿不到後端的 credentialed CORS 存取。但要誠實說:持有廣泛 host 權限的擴充功能、或任何本機程式,仍然可以直接連 localhost — 只有設 SYNC_API_KEY 才真正擋得住 |
| 後端與 Dashboard proxy 都驗證 Host 標頭 | 防 DNS rebinding:惡意網站無法把自己的網域名稱指向 127.0.0.1 來繞過瀏覽器的同源保護 |
⚠️ 未設定
SYNC_API_KEY時,任何能存取本機 loopback 的程式都能讀寫資料。因此直接執行後端時會拒絕啟動,除非同時綁 loopback 並明確設ALLOW_KEYLESS=1。Docker Compose 的容器內 bind 不是 loopback,所以必須設定 key;多人/網路部署也一律必須設 key。
想改預設配置時
預設 Compose 配置(主機 port 只發布到 loopback,並設定 API key)適合「自己一台電腦、自己用」的情境。如果你想客製化:
- 想開放 backend 給 LAN 其他電腦用 → 建議設個強的
SYNC_API_KEY - 想用外部 SMART App(包含 mediprisma.tw 上的「醫析 MediPrisma」)連後端 → 必須先設定
SYNC_API_KEY(未設 key 時 CORS 鎖在 loopback,不再對外部網站開放)。這條 SMART/backend 路徑與 popup 的直接 File handoff 是兩個不同功能;直接帶入不經 backend - 想多人 / 多病人臨床使用 → 超出這份文件範圍,請透過 voho0000@gmail.com 聯絡
如需詳細技術設計或進階部署協助,請透過 voho0000@gmail.com 聯絡。