development
資安習慣養成:日常生活與開發的資安清單

資安這件事,常常要等到出問題才會被想起來。不過,大多數的帳號被盜、金鑰外洩,其實都可以靠平常的小習慣降低風險。這篇把我自己的資安習慣整理成一份清單,分成「平常生活習慣」與「開發習慣」兩個部分:前者適合每個人,後者則是寫程式、部署服務時要多留意的地方。
一、平常生活習慣
密碼管理

- 網站支援 Passkey(通行密鑰)時,可以優先使用:Passkey 使用與網站綁定的加密憑證登入,再透過 Face ID、Touch ID 或裝置 PIN 碼確認是你本人操作,能降低帳密遭釣魚的風險。要注意,生物辨識也可能只是用來解鎖或自動填入密碼,看到 Face ID 並不代表這次登入一定使用了 Passkey。
- 每個網站都使用不同、夠長且難以猜測的密碼:重複使用密碼,或只替換結尾的數字,都可能讓一個網站的外洩波及其他帳號。你不需要自己記住所有密碼,可以讓密碼管理器協助產生與保存,並保護好管理器本身的登入方式。
- 能開啟兩階段驗證,就盡可能開啟:重要帳號優先採用 Passkey、支援防釣魚的安全金鑰,或驗證器 App。只有簡訊選項時,也可以先開啟,但仍要小心驗證碼被騙走。Email 驗證的保護程度取決於登入設計與信箱安全,單純確認 Email 地址也不代表已開啟兩階段驗證。
- 不用為了固定週期,無理由地更換密碼:如果每次只是替換年份或加一個數字,幫助其實有限。NIST 現行指引也不要求無理由定期更換使用者密碼。不過,一旦發現外洩、誤填到釣魚網站,或有可疑登入,就應立即更換,並檢查其他使用相同密碼的帳號。NIST 指引
- 先準備好帳號救援方式:開啟兩階段驗證後,要妥善保存備用碼,確認備援信箱與電話仍能使用。避免把唯一的備用碼放在同一支手機,否則手機遺失時,可能連救援方式都一起失去。
- 優先保護主要 Email:許多服務都能透過 Email 重設密碼,所以主要信箱一旦被盜,影響可能擴大到其他帳號。信箱、密碼管理器與常用的 Google、Apple 帳號,都值得優先完成安全設定。
以我自己來說,只要能開啟生物辨識或者是兩階段驗證的,我一定都會開啟。
因為單靠一組密碼,還是可能遇到釣魚、重複使用或服務外洩等問題。多加一道保護,可以減少其中一個環節出問題後,整個帳號就被拿走的風險。
電腦、手機、網路等使用安全

- 要學會判斷網域:不要只看網址裡有沒有品牌名稱。例如
accounts.google.com與google.com.login.example看起來都有 Google,但後者屬於login.example。不熟悉的登入網址,建議回到官方 App、自己儲存的書籤或已確認的官網操作,避免只靠頁面長相判斷。 - 注意 HTTPS,也要確認網站身分:HTTPS 可以保護傳輸中的資料,但釣魚網站同樣能使用 HTTPS。看到加密標示,仍要確認網域與操作內容;遇到憑證錯誤或瀏覽器安全警告時,不要為了繼續操作而直接略過。
- 不要把驗證碼交給別人,也不要批准來路不明的登入要求:驗證碼只能用在你自己發起、且已確認是官方的操作。有人以客服、退款或協助驗證為由索取時,先停止操作。突然收到登入確認通知,也不要順手按同意。
- 作業系統與 App 開啟自動更新:更新除了新功能,也包含已知漏洞的修補。手機、電腦、瀏覽器與常用 App 都要留意;已停止提供安全更新的裝置或軟體,則要評估更換。
- 重要資料不要只存在一個地方:可以參考 3-2-1 備份原則,保留三份資料,包含原始檔與兩份備份,放在兩種儲存媒介,並至少有一份位於異地。雲端同步可能連誤刪或遭破壞的檔案一起同步,所以還要確認版本還原、離線備份等保護,並實際測試能否還原。
- 學會判斷 App 的每一個授權:先想想它的功能,是否真的需要相機、麥克風、通訊錄、定位或全部照片。能選「使用期間允許」或「只允許部分照片」,就先給需要的範圍。不確定用途時,可以先拒絕,等功能真的需要再開啟。
- 舊手機、舊電腦送人或出售前,要依官方流程完整清除:先確認備份與帳號移轉完成,再處理帳號登出、裝置綁定及清除資料。手動刪掉幾個資料夾通常不足以完成清理;手機中的 SIM 卡、eSIM 與記憶卡也要一併確認。
- App 與瀏覽器擴充功能,要確認來源與權限:優先從官方來源安裝,少裝用不到的工具。尤其要留意能讀取所有網站、控制電腦或存取檔案的權限,不要因為陌生訊息要求,就安裝遠端控制程式、描述檔或憑證。
這是我最常見到親友之間帳號被盜的狀況。大多數人都是在 LINE 或者是簡訊中,點選了來路不明的網址,而他們通常不太會去辨識這些網址是否安全。
所以,學會辨識網址、遇到不確定的要求先停下來,可以減少掉進釣魚網站的機會。再搭配帳號驗證與裝置更新,保護會更完整。
日常行為

- 避免讓信用卡離開自己的視線:卡號、有效日期與安全碼外露後,就可能被他人拿去嘗試線上交易,部分交易也不會再要求簡訊驗證。實體刷卡時,盡量自己感應或在現場確認,減少卡片被拍照、抄錄的機會。
- 優先使用可信任的行動支付:例如 Apple Pay 會用裝置帳號號碼與交易安全碼處理付款,減少原始卡號交給商家的機會。LINE Pay 等服務也能減少實體卡片交付,但各家的保護機制不同,仍要確認收款對象與金額,不能保證完全沒有盜刷或詐騙風險。
- 開啟信用卡的消費通知:每次收到通知時,順手確認商家、金額與幣別,小額交易也不要忽略。遇到不認得的消費,就從銀行官方 App 或卡片背面的電話聯絡銀行,必要時先鎖卡。
- 習慣性將裝置進行上鎖。不管是電腦或者是手機,只要離開它,就務必上鎖,並且避免被人看到相關的密碼。
- 避免在通訊軟體中任意傳送個資與證件:像是身分證、健保卡、信用卡資料,都可能被轉傳、截圖或留在備份中。真的有提供需求時,先確認收件者與用途,優先使用對方的官方安全管道,只交付必要的資料。
- 不要看到連結就直接點:Email、LINE、簡訊或 QR Code,都可能把你帶到釣魚網站。不確定來源時,直接從官方 App 或已確認的官網查詢。無痕模式主要減少本機留下的瀏覽紀錄,無法讓陌生網站變安全,也無法阻止你把資料交給假網站。
- 證件影本可以加上用途浮水印,但仍要限制提供範圍:例如標示「僅供某單位辦理某事項使用」並附日期,盡量遮住不必要的欄位。浮水印只能增加濫用的難度,仍可能被修圖或移除,所以收件者與傳遞方式一樣重要。
- 使用公共 Wi-Fi 時,確認網路與連線狀態:HTTPS 已能保護許多傳輸內容,使用公共 Wi-Fi 不代表帳密一定會外洩。不過,銀行交易、雲端管理等敏感操作,可以優先使用自己的行動網路;不要忽略憑證警告,也不要安裝陌生登入頁要求的憑證或程式。
- 遇到急著要你匯款、交資料或操作帳號的要求,換個管道確認:就算訊息來自熟人的帳號,也可能是帳號被盜。可以使用原本就知道的電話或當面確認,避免直接相信對方新提供的聯絡方式。
你可能沒有特別想過,信用卡正反面被拍下來,對方就可能取得刷卡需要的資訊。而且部分線上交易不會再要求簡訊驗證,所以卡片本身的保管,還是很重要。
所以我在出門的過程中,都是不會拿出信用卡的,我一定會使用第三方支付,來減少實體卡片資料外露的機會。
學會安全性檢查

- 定期檢查主要帳號的登入裝置與活動:Google、Apple、微軟、Facebook 等服務,通常都有安全性或登入紀錄頁面。看到不認得的裝置時,先確認是否為自己的舊裝置或不同瀏覽器,再處理可疑登入;顯示的地點可能受網路影響,不適合單靠地點判定是否被盜。
- 每月檢查信用卡與銀行交易:把帳單與實際消費、訂閱紀錄對照,確認沒有不明扣款或已取消卻仍收費的服務。即時通知與每月對帳可以一起做,避免漏掉小額或持續扣款。
- 檢查第三方連線與分享權限:看看哪些 App 還能讀取你的信箱、雲端硬碟或社群資料,也檢查文件是否設定成任何知道連結的人都能開啟。不再使用的連線與分享,就把授權收回。
- 先知道帳號被盜時的處理入口:從可信任的裝置進入官方救援流程,檢查密碼、登入工作階段、備援資料與第三方授權;涉及信用卡時,立即聯絡銀行。修改密碼後,也要確認是否還有其他存取方式沒有被撤銷。
就算我們養成了所有的好習慣,也沒有辦法確保我們的密碼或者是我們的信用卡卡號絕對不會出問題。
但這個時候你就要了解,如果真的出問題之後,你可以學會怎麼樣進行止血。
二、開發習慣
一定要使用版本控制

版本控制可以幫你記錄每次程式修改,讓你在上線前查看差異,出問題時也能追查是哪一次變更造成的。
不過,Git 會保留歷史,敏感資料一旦提交,就可能留在舊版本裡。所以在開發前,除了導入版本控制,也要先設定哪些檔案不能提交,並養成檢查變更內容的習慣。
- 提交前,先看一次差異:不管程式是自己寫的還是 AI 產生的,都要確認沒有把密碼、金鑰、資料庫備份或使用者個資一起提交。
- 保護儲存庫本身的權限:只讓需要的人存取,重要分支加入適合團隊的審查流程。私人儲存庫也可能因帳號、協作者或整合工具出問題而外洩,機密仍要獨立管理。
學會判讀金鑰是什麼

- 先了解金鑰的用途與權限:部分 API Key 可以讓程式使用付費資源,或代表你的身分存取資料,所以要像保管密碼一樣保管。不同服務也有明確設計給前端使用的公開設定值或 Publishable Key。能不能公開,要以官方文件為準,不能只靠名稱判斷;公開設定值背後的資料存取權限也要另外設定。
- 把機密金鑰與原始碼分開管理:可以透過後端環境變數或平台的 Secrets 功能提供金鑰。若使用
.env,必須主動設定.gitignore並確認沒有被追蹤;存成環境變數不會自動獲得保護,也不等於加密。範例檔只放欄位名稱與假值,部署平台的讀取權限也要限制。 - 不同專案、不同環境使用不同金鑰:測試環境與正式環境分開,也避免多個專案共用同一把金鑰。這樣其中一把外洩時,可以縮小影響範圍,也比較容易確認哪些服務需要更新。
- 每份金鑰只開啟必要權限:只需要讀取資料,就不要一起開啟刪除、付款或管理帳號的權限。平台有提供時,也可以限制可存取的資源、來源與有效期限,避免一把金鑰可以操作整個帳號。
- 前端的環境變數也可能公開:例如 Vite 的
VITE_變數會被打包到前端程式中,使用者可以取得內容。需要保密的金鑰應留在後端或 Serverless Function,不能因為放進.env就認為使用者看不到。 - 設定用量與費用提醒:替付費 API 設定合理的配額、告警與可用的停用機制,並確認平台的「預算」究竟只是提醒,還是會真的停止服務,避免以為設了預算就一定不會超支。
金鑰可能洩漏的方式

- 儲存庫歷史資訊中包含 API Key:就算最新版本已經刪掉,Git 歷史、分支、Fork 或他人的複本仍可能保留。只要曾經外洩,就先到平台撤銷或換發金鑰,再處理歷史資料。
- 在聊天、文件或工單中傳遞 API Key:群組成員、分享權限與後續截圖,都可能讓金鑰被更多人看見。團隊協作時,優先使用能限制成員權限的機密管理工具,避免讓金鑰長期留在 LINE、Discord 或文件中。
- 透過不受保護的連線傳遞 API Key:沒有 HTTPS、忽略憑證警告,或把金鑰送到假冒的服務網址,都可能造成外洩。在外處理敏感操作時,可以優先用自己的網路,同時確認服務網址與加密連線。
- 在 Terminal Log、錯誤訊息或錄影畫面中列出 API Key:除錯時印出環境變數、完整請求標頭或設定檔,都可能讓金鑰留下紀錄。記錄時應遮蔽敏感欄位,分享截圖、直播畫面與 Log 前,也要再檢查一次。
- 裝置、第三方工具或平台發生問題:惡意擴充功能、遭入侵的電腦或供應商事件,也可能影響金鑰安全。即使自己沒有公開貼出金鑰,仍要有撤銷、換發與查閱紀錄的能力。
- 直接把機密貼進 AI 對話或交給不必要的工具:請 AI 協助時,先使用假值、遮蔽後的 Log 或最小必要片段。檢查 Agent、MCP 與外掛能讀取哪些檔案及服務,避免為了一次除錯,就開放整個正式環境。
上線前的基本檢查

- 登入與資料權限,要在伺服器端檢查:把按鈕藏起來、限制前端頁面或設定 CORS,都不能代替存取權限驗證。至少測試未登入者、一般使用者與管理者的差異,確認使用者 A 無法讀取或修改使用者 B 的資料。
- 確認資料庫與檔案儲存沒有意外公開:不要為了讓功能先跑起來,就把規則改成所有人都能讀寫。上線前要檢查資料表、儲存空間、備份檔與管理介面的公開範圍。
- 不要直接相信前端傳來的資料:表單、檔案上傳、商品價格與使用者身分,都要在可信任的後端重新驗證。使用框架提供的安全處理方式,像是參數化查詢、輸出編碼,以及檔案類型與大小限制。
定期掃描

- 定期檢查套件漏洞(Dependency Vulnerability):透過套件管理工具或平台告警,檢查直接與間接依賴。發現漏洞後,確認是否影響自己的使用方式,安排修補與必要測試,避免只看見告警數字,卻一直沒有處理。
- 定期檢查團隊權限:包含 GitHub、Google Workspace、雲端平台與社群工具。人員離職或合作結束時,要及時移除帳號、組織成員與相關授權,必要時換發曾共用的金鑰,避免只刪掉一個帳號就以為完成。
- 定期整理 API Key:撤銷不再使用的金鑰,記錄仍在使用的用途、負責人與有效期限,避免在盤點文件中保存完整機密值。機器用金鑰可以依風險與平台能力設定到期或自動輪替,和前面提到的使用者密碼管理分開考慮。
- 定期盤點網域、DNS、Cloud 與第三方服務:確認由誰管理、哪些人能修改、續費方式與通知信箱是否有效。不再使用的測試服務、公開分享與 DNS 記錄,也要一起清理,避免留下沒有人維護的入口。
- 適當使用 AI 協助檢查,但控制它的權限:可以先讓 AI 閱讀必要的程式碼與遮蔽後的設定,協助找出可疑寫法。需要執行測試時,優先使用測試環境;刪除資料、修改正式設定或調整權限等動作,要有人確認。AI 沒有發現問題,也不能保證程式完全安全。
- 把機密掃描加入提交或部署流程:在程式推送、合併或上線前檢查是否含有金鑰與密碼,降低靠人工檢查漏掉的機會。掃描工具也有偵測範圍限制,不能取代金鑰權限管理。
- 確認監控有人接收,也定期測試備份還原:登入異常、權限變更與用量暴增,要知道會通知誰。程式碼有 Git 之外,資料庫與使用者上傳檔案也要另外備份,並確認真的能還原。
發生事故解決方案

就算再怎麼小心,還是有可能遇到資安問題。所以除了預防,我們也要先知道怎麼止血、確認影響,再把服務安全地恢復。
說實在,我自己遇過的次數不多,也不敢說以後一定不會再遇到。不過,至少要先了解幾個基本處理方式,遇到 API Key 外洩時,才知道怎麼開始止血。
- 先止血,讓外洩的憑證失效:到服務平台撤銷或停用外洩的 API Key、Token 等憑證,必要時暫停受影響的服務。刪掉電腦裡的金鑰文字、移除
.env或改成私人儲存庫,都不會讓已被取得的金鑰自動失效。 - 查閱監測紀錄,確認影響範圍:檢查可疑時段的登入、API 呼叫、費用、資料異動與權限變更。止血的同時保存必要紀錄,避免急著清空 Log,反而失去追查線索;也要確認對方是否留下新帳號、金鑰或其他存取方式。
- 在可信任的環境中換發金鑰,並修補外洩原因:盤點哪些服務引用了舊金鑰,再逐一更新與重新部署。如果主機或管理帳號也遭入侵,要先隔離、修復或重建,避免新金鑰放回去後再次外洩。
- 確認舊金鑰已撤銷,再驗證服務恢復:先查看平台的撤銷狀態;若還需要測試,使用可信任的本機工具或官方方法,做最小範圍的確認,並避免把機密寫進紀錄。AI 可以協助產生使用佔位值的測試步驟,不需要把完整金鑰貼進對話。
- 清理外洩位置,持續追蹤後續活動:處理程式、文件、Log、歷史版本及分享權限中的殘留資料。涉及 Git 歷史重寫時,要和協作者協調,也要知道無法保證回收所有外部複本。
- 留下簡短的事故紀錄與後續改善項目:記下發現時間、影響資源、已完成的處理與負責人,並視影響範圍聯絡平台客服、團隊或受影響的人。把這次缺少的告警、權限限制或檢查流程補起來。