DAY 220 · 2026-08-07

差一步就把身分證字號發出去

SLIDES · 7
Day 220 差一步就把身分證字號發出去 — 投影片 1Day 220 差一步就把身分證字號發出去 — 投影片 2Day 220 差一步就把身分證字號發出去 — 投影片 3Day 220 差一步就把身分證字號發出去 — 投影片 4Day 220 差一步就把身分證字號發出去 — 投影片 5Day 220 差一步就把身分證字號發出去 — 投影片 6Day 220 差一步就把身分證字號發出去 — 投影片 7
1 / 7

Day 218 那篇曬 iPAS 證書的文,我把證書照片丟給 Claude,指令只有四個字:放上圖片。

它沒有直接放。它先去讀了那張圖,然後回我:照片上的姓名、身分證字號和出生年月日看得一清二楚,發出去就收不回來。

我沒有叫它檢查個資。它是在執行我交辦的任務途中,順手抓到的。

這篇分享:那組個資為什麼特別危險、為什麼「順手抓到」比「叫它檢查」值錢、AI 第一次其實沒遮好又是怎麼自己抓到的、遮完圖之後我差點漏掉的第二個坑,還有最重要的——這次表現這麼好,我要怎麼確保下次不用再靠運氣。

姓名、身分證字號、生日,剛好是最好用的那一組

證書上印的是一整組:姓名、身分證統一編號、出生年月日——正好是台灣做身分核驗最常用的那幾格。銀行、電信、線上服務要確認「你是不是你」,問的就是這些。外洩之後最直接的兩種後果,一是精準詐騙,對方能把你的資料報得一字不差,你的戒心自動掉一半;二是冒名申辦,拿去審核比較鬆的平台開戶、辦門號。

法律這邊幫不上什麼忙。個資法管的是別人怎麼用你的資料,自己貼出去的告不了誰。更麻煩的是那組號碼改不掉——內政部說得很清楚,身分證統一編號只有錯誤、重複或特殊情事才能變更,單純外洩不算,得先有具體的損害事證,提供法院或檢察署的裁判書類,才申請得了。

也就是說,你的身分得先真的被拿去冒名申辦過,才換得掉那組號碼。「發出去就收不回來」不是修辭,是字面意思。

「順手抓到」比「叫它檢查」值錢

回頭看,這次最值得記下來的不是它抓到了,是它抓到的時機。

我下的指令是「放上圖片」。不是「檢查有沒有個資」,也不是「幫我看一下這張圖能不能公開」。如果我要先想到該檢查,那這道防線的上限就是我的想像力——靠人臨場想起來的檢查永遠只涵蓋你已經想得到的東西,而會出事的通常是你沒想到的那一項。

它是做別的事做到一半順便發現的,然後停下來先講。這比專門寫一條「個資檢查」的指令有用,因為專用指令要人記得叫它。

它第一次其實遮失敗了

這段是整件事的轉折。

先講一下環境限制:這台機器沒有 ImageMagick,也沒有 Pillow。一般處理圖片的兩條路都不通。它沒有停下來要我裝東西,改用 ffmpeg 的 drawbox 濾鏡把那一塊塗掉:

# 沒有 ImageMagick、沒有 Pillow,就用 ffmpeg 的 drawbox 把那一塊塗掉
ffmpeg -i ipas-certificate.png \
  -vf "drawbox=x=<左上角 X>:y=<左上角 Y>:w=<寬>:h=<高>:color=black@1:t=fill" \
  ipas-certificate-masked.png

然後第一次就遮歪了。框沒對準,身分證字號開頭兩碼還露在外面。

如果故事停在這裡,結論會是「AI 靠不住」。但它接下來做的事才是重點:它把遮完的圖裁切出那一塊,重新讀一次,去確認自己剛剛到底遮乾淨了沒有。就是這一步抓到開頭兩碼還在,調整座標之後重來,第二次才對。

它沒有直接相信自己算出來的 drawbox 座標。它把自己的輸出當成待驗證的東西,而不是完成品。

遮好圖,離安全還差一步

以為到這裡就結束了,結果它接著又回報一件事:未遮蔽的原檔還躺在 repo 的 content/day218/attachments/ 裡面。

這個坑比「圖上有個資」安靜得多。遮蔽後的圖是新檔案,原檔沒有消失,它就在旁邊。而我的發佈流程(content-publish)下一步會 commit 整個 attachments 資料夾、部署到 dawsonwang.com——那張沒遮的原圖會直接躺在我自己的網站上,附帶完整檔名,可以直接連。

順手還帶出第三件事:原檔 3300px、9.7MB,超過 Threads 8MB 的圖片上限,縮到 2048px 才過。這件事跟個資無關,但它是同一次讀圖的副產品。

遮了圖不等於安全,原檔也要移出 repo。

抽到 SSR 要立刻存檔

寫到這裡我才意識到,前面那些其實都還不是重點。

重點是:這次是運氣。

我的指令是「放上圖片」。它剛好去讀了圖、剛好覺得這件事該先講、剛好在遮完之後回頭驗證自己、剛好又想到原檔還在 repo 裡。四個「剛好」疊在一起才有這個結果。換一天、換一個對話、換一種講法,它可能就乖乖照做,圖直接貼上去了。

這四個「剛好」少掉任何一個,這篇就會變成 Day 218 出事的檢討文。

所以抽卡抽到 SSR 的當下,要做的事不是慶祝,是存檔。這次 AI 等於免費幫我試出了一套完整的做法:

  1. 讀圖,標出畫面上所有可辨識的個資
  2. 用 ffmpeg drawbox 遮掉
  3. 裁切後重讀一次,確認自己到底遮乾淨了沒有
  4. 檢查未遮蔽的原檔有沒有留在 repo 裡
  5. 順手看一下檔案大小和圖片尺寸有沒有超過平台上限

這五步是它跑出來的,不是我設計的,而且比我自己會想到的還完整。這種東西不留下來太可惜了。

當下我做了一半:把整件事寫進記憶(memory)裡,內容包含 drawbox 的用法、「一定要裁切回讀驗證」這一步、還有原檔要移出 repo。所以下次在同一個專案裡附照片,它至少有機會想起來。

但另一半還沒做。我剛剛翻了一遍專案的 .claude/skills/,搜「個資」、「遮蔽」、「PII」,一個都沒有。這套做法還沒變成 skill,也還沒變成我的內容流程(content-pipeline)裡的一個步驟。

差別在哪?記憶是「它可能會想起來」,流程是「它一定會跑到」。前者還是抽卡,只是提高了機率;後者才是真的把那隻 SSR 留下來。

下一步我要做的就是這件事:把它做成 commit、部署前掃過 attachments 資料夾的一道關卡,跟現在那道檢查(check-image-coverage.ts)一樣——沒過就擋下來,不靠任何人記得。

一句話總結

我原本想寫的結論是「還好有 AI 幫我把最後一道防線守住」。

但它第一次沒遮好,這個結論就不成立了。AI 當不了最後一道防線——它會出錯,而且它錯的樣子很像成功(一個框確實畫上去了)。

真正救到我的是它做完之後回頭驗證自己:裁切、重讀、發現沒對準、重做。

只是這種表現,今天出現不代表明天會出現。AI 給你一次漂亮的示範,那是抽卡;不只把那次示範寫成記憶,還要寫成 skill、寫進流程,才是把 SSR 存進存檔。

不然下次,你就得再抽一次。

最近開始做免費的一對一諮詢,幫你把 AI 接進自己的工作流——有需要的話可以約:https://www.dawsonwang.com/


Day 218 證照是給不懂的人看的(就是這張證書照片的那篇):https://www.dawsonwang.com/day/218 內政部:身分證字號僅錯誤、重複或特殊狀況可變更(中央社,2025/12/31):https://www.cna.com.tw/news/aipl/202512310147.aspx 個人資料保護法全文:https://law.moj.gov.tw/LawClass/LawAll.aspx?PCode=I0050021

延伸閱讀
看完整 242 篇 →