為什麼自己生 QR code 比第三方產生器安全?4 個你沒想過的風險
多數線上 QR 產生器把你的網址送到伺服器算 QR,過程中 IP / 內容 / 時間戳被收集。本文拆解 4 個風險 + 介紹 client-side QR 工具。
你在 Google 搜「QR code 產生器」,點進去任一個 — 輸入網址 → 按下「生成」 → 拿到 QR 圖。看似簡單、無害。
但你有沒有想過:伺服器在這 1 秒內看到了什麼?多數線上 QR 工具會把你的內容(網址、Wi-Fi 密碼、聯絡資訊)送到他們的後端算 QR — 過程中你的 IP、時間戳、產生內容 全進他們的 log。
本文拆解 4 個被忽略的隱私風險,介紹 client-side(瀏覽器內算) QR 工具的選擇。
風險 1:你的網址 / 內容被伺服器收集
server-side QR 產生器的流程:
- 你輸入網址(或任何 QR 內容)
- 瀏覽器 POST 到 server
/api/generate-qr - server 用後端 library 算 QR 矩陣 + render PNG
- server 回傳 PNG 給瀏覽器
- 你下載
過程中 server 看到:
- 你的完整 QR 內容(網址 / Wi-Fi 密碼 / 聯絡資訊 / 任何文字)
- 你的 IP 地址(用於 rate limit + analytics)
- timestamp + User-Agent
- 多數服務還會 store 這些資料用於「最近產生過的 QR」功能
對「我要把 Wi-Fi 密碼變 QR 給訪客」這種場景 — 你的 Wi-Fi 密碼進了第三方服務的 log。
風險 2:QR 圖檔有 watermark 或廣告 inject
很多免費 QR 服務的商業模式是廣告 / 升級付費版。免費版常見手法:
- QR 中央放小 logo(廣告自家品牌)
- 圖檔下方加 watermark 文字
- 解析度限制低,要付費版才高
- 限制每天產生次數,誘導註冊
對個人臨時用 OK,但印刷品 / 商業用 — watermark 影響專業感。
風險 3:DNS / 中間人攔截
server-side QR 流程經過:
- 你 → 第三方 server(QR 服務)
- 第三方 server 處理
- 第三方 server → 你
如果第三方 server 的 DNS / 路由被劫持 → 攻擊者可以:
- 攔截你送出的內容(譬如你要 QR 化的 Wi-Fi 密碼)
- 回傳「modified QR」(譬如把網址改成釣魚站)
對 client-side QR(純瀏覽器內 JS 算):沒有「送出」這個動作 — 攻擊者沒有攔截點。
風險 4:服務消失你的「歷史 QR」也消失
某些 server-side QR 服務提供「我的 QR」dashboard — 你產過的 QR 都列出來。
聽起來方便,但:
- 服務倒閉 → 你的 QR 紀錄消失
- 服務被駭 → 你的 QR 內容被外洩(包含 Wi-Fi 密碼、私人聯絡資訊)
- 服務被收購 → 條款改變,你的資料可能變他們的「資產」
對長期儲存 / 多份 QR 管理場景 — 自己存比較穩。
4 種 QR 產生器類型對比
| 類型 | 例子 | 隱私 | 速度 | 客製化 |
|---|---|---|---|---|
| Server-side 大型服務 | QR Code Generator、Beaconstac | ✗ 內容傳 server | 中 | 高(logo / 顏色 / dashboard) |
| Server-side 簡易服務 | 各種「免費 QR 產生」站 | ✗✗(部分還無 HTTPS) | 慢 | 低 |
| Client-side library | drrop.cc/qr、QRCode-Generator GitHub | ✓ 純瀏覽器內 | 快 | 中(顏色、size) |
| 離線 app | QR Code Generator (macOS app)、Stocard | ✓✓ 完全本地 | 快 | 中 |
怎麼識別「真 client-side」QR 產生器
關鍵問題:輸入網址後,瀏覽器有發 Network request 嗎?
驗證方法
- 打開 QR 產生器網站
- 按 F12 開 DevTools → Network tab
- 清空 log(清空 button)
- 輸入 QR 內容、按生成
- 看 Network log
如果有 POST 到 server 帶你的內容 → server-side 如果只有 static asset 載入、沒有 POST → client-side
Client-side 額外特徵
- QR 圖在你輸入時即時改變(不需按「生成」按鈕)
- QR 在 offline mode 也能生成(試試斷網後再產一次)
- View source 能看到 JavaScript QR library(譬如 qrcode.js、qrcode.react)
drrop.cc 的 QR 設計
drrop.cc/qr 是 100% client-side:
- 用
qrcode.reactlibrary 在瀏覽器內算 QR 矩陣 - 直接 render 成 SVG(不依賴 Canvas API、不需要 server)
- 下載 PNG 也是瀏覽器內 Canvas convert(不送 server)
- 伺服器完全不知道你產過什麼 QR
驗證:
Open https://drrop.cc/qr
DevTools → Network → 輸入網址
→ 看到的只有 static asset (JS / CSS / fonts)
→ 沒有任何 POST request
額外:
- 無 watermark
- 無 logo inject
- 無解析度限制(PNG 是 4× 原 size = 1280×1280)
- 完全免費 + 無註冊
不同場景的建議
高隱私場景(Wi-Fi 密碼 / 私人地址 / 醫療資訊)
→ client-side QR 或 離線 app
印刷品(名片、海報、貼紙)
→ client-side QR + 下載 SVG(向量、不失真) → 或專業 design tool(Illustrator 內建 QR)
商業 / 行銷(需要 logo、顏色、追蹤)
→ 付費 server-side(譬如 QR Code Generator Pro) → trade-off:方便 vs 隱私
偶爾用、一次性
→ client-side QR(drrop.cc/qr)— 無註冊、即用即走
FAQ
Q:iOS / Android 內建相機掃 QR 有風險嗎? A:掃 QR 本身沒風險 — 它只是把圖像解碼成文字。風險在掃到後的 URL 是否惡意。iOS / Android 不會自動打開 URL,會先顯示給你看。先看 URL host 再決定點不點。
Q:drrop.cc 的 QR 真的不存任何資料嗎? A:對。/qr 頁是純 static page + client-side JavaScript。我們的伺服器完全不知道你輸入了什麼。可以離線使用(先載入頁面、再斷網仍能產生 QR)。
Q:client-side QR 可以做動態 QR(事後改網址)嗎? A:不能 — 純 client-side QR 內容寫死在 QR 矩陣裡。如果要「動態 QR」(事後能改目標),必須走 server-side(QR 指向中介 URL,server 端 redirect 到真目標)。drrop.cc 縮網址 + QR 組合可以模擬:QR 指向 drrop.cc 短網址 → 短網址可以靠 deletion token 撤回。
Q:可以信任 GitHub 上的開源 QR library 嗎?
A:開源代碼可被 audit — 比 closed-source server 信任度高。但「在哪個 host 跑」也重要。drrop.cc/qr 用 qrcode.react(GitHub 開源 + 2k+ stars + 活躍維護)。
Q:印刷品 QR 我用 1280px PNG 夠嗎? A:看印刷尺寸。一般名片上 QR ≈ 2cm × 2cm,1280px 綽綽有餘。海報大型 QR(10cm+)建議用 SVG 確保不失真。
最後
QR code 看似中性技術,過程中的隱私揭露取決於工具設計。
選 QR 產生器的 5 秒檢查:
- 輸入後 Network tab 有 POST 嗎?
- QR 有 watermark / logo / 廣告嗎?
- 服務 TOS 寫不寫「儲存你的 QR 內容」?
- 有 GDPR / CCPA 合規聲明嗎?
- 開源 / 可 audit 嗎?
→ 試試 client-side QR:drrop.cc/qr