網站上線檢查清單
目標:絕不讓任何網站、Shopify 商店、應用程式或 SaaS 帶著漏洞、法律缺失或中斷的購買流程上線。上線與否仍由使用者決定:你負責檢查與準備,但不實際發布任何內容。
決策規則(阻斷性)
若以下任一情況持續存在,則不得發布:
- 私鑰或機密暴露於前端程式碼、Git 儲存庫或建置檔案中;
- 使用者可以讀取或修改其他使用者的資料;
- HTTPS 缺失或設定錯誤;
- 資料庫的行層級安全策略(RLS 或同等機制)未啟用或設定不當,導致私有資料可被存取;
- 需取得同意才能使用的追蹤器在未經同意前即開始運作;
- 隱藏或誤導性費用;
- 購買或付款流程存在缺陷。
方法
- 識別專案類型(形象網站、商店、需帳號的應用程式、含付款的 SaaS),並跳過不適用的檢查項目,同時說明原因。
- 依序處理以下 5 個區塊。針對每個檢查項目,標註狀態為:OK / 需修正 / 不適用 / 無法驗證,並附上測試方法或證據。
- 若你能直接存取程式碼或資料庫(Supabase、Vercel、Shopify),則自行驗證;否則,向使用者提供確切的測試步驟。
- 最後產出報告(格式如下)。
區塊 1 — 技術安全性
- 全域名啟用 HTTPS,HTTP 需重新導向至 HTTPS,無混合內容;HSTS 僅在驗證後啟用。測試:確認 http:// 會重新導向。
- 安全標頭:適當的 CSP、X-Content-Type-Options: nosniff、Referrer-Policy、iframe 保護。測試:使用 SecurityHeaders.com。
- 機密資訊(私鑰、付款權杖、祕密 API 金鑰)僅存放於伺服器端。測試:建置後的 JavaScript 檔案及 Git 儲存庫中不應包含任何機密。
- 伺服器端驗證(資料型別、長度、欄位);僅靠前端驗證可被繞過。測試:修改過的請求應被拒絕。
- 每個資源的權限控制:需同時驗證身分及對特定物件有權存取。測試:帳號 B 無法讀取或修改帳號 A 的任何資料。
- SQL 注入 / XSS:使用參數化查詢、框架提供的跳脫功能,絕不使用未經處理的使用者 HTML。測試:HTML 文字應以純文字顯示,不會被執行。
- CSRF 與 Cookie:設定 Secure、HttpOnly、SameSite 屬性;若使用 Cookie 進行身分驗證,則需啟用 CSRF 保護。
- 依賴套件需更新至最新版本,無重大安全警報,移除不必要的套件。
- CORS 僅開放給必要的來源(此機制並非存取控制屏障)。
- 上傳功能需有嚴格控管:限制檔案大小、驗證實際格式、允許的副檔名、重新命名檔案、存放於隔離儲存空間。
- 濫用防護:對登入、電子郵件和表單施加速率限制;必要時使用 Turnstile 或 CAPTCHA。
- 管理員帳號:啟用 MFA、限制存取權限、內部管理後台不應對外公開。
- 生產模式:關閉除錯模式、不發布 .env 檔案、避免詳細的日誌輸出。
- 電子郵件需使用正確的域名設定:SPF、DKIM、DMARC。
區塊 2 — 資料(Supabase 或同等機制)
- 僅在行層級安全策略正確的情況下,才能在瀏覽器端使用 publishable/anon 金鑰;service_role 金鑰僅限伺服器端使用。
- 所有對外開放的資料表皆需啟用 RLS,並移除 anon 與 authenticated 角色不必要的權限。
- 權限策略需依動作(SELECT、INSERT、UPDATE、DELETE)分別設定,並與 auth.uid() 關聯;需使用三個設定檔進行正反向測試:訪客、使用者 A、使用者 B。
- Storage 儲存空間的規則需適當設定(公開的頭像不應擁有與發票相同的權限)。
- 身分驗證:授權的重新導向 URL、工作階段有效期限、密碼重設與登出功能皆需測試。
- Security Advisor:無未處理的重大安全警報。
- 備份:確認實際備份選項已啟用,並測試過還原流程。
- 日誌與警示(如 5xx 錯誤、配額限制):絕不可記錄密碼或權杖。
- 環境應分離(本機、預發布、正式環境),並準備好復原機制。
區塊 3 — 法律與信任(法國 / 歐盟,請依業務類型確認)
- 法律聲明(公司名稱、聯絡方式)、隱私權政策(資料類型、用途、法律依據、保存期限、使用者權利、聯絡方式)。
- 服務條款;若涉及銷售,需有銷售條款;退款與撤回權(自 2026 年 6 月 19 日起,相關合約需提供線上撤回功能);消費調解人資訊。
- Cookie:需有政策與橫幅,拒絕選項需與接受同樣簡單;未經同意不得放置任何追蹤器;使用者應可在每個頁面修改偏好設定。
- 表單:收集資料時需提供資訊、勾選框預設為未選取、資料最小化原則、設定清除期限。
- 第三方工具清單(分析工具、像素、聊天系統、CAPTCHA、AI 服務)及其資料傳輸至歐盟外的情況。
- 不得使用暗黑模式、虛假急迫感或隱藏費用(含稅價格、運費、訂閱費用需在付款前明確顯示)。
- 不得使用虛假評論,或做出無法證實的承諾與數據。
- 圖片、圖示、影片、字型需擁有合法授權。
- 未成年人:在法國,若資料處理基於同意,未滿 15 歲需取得雙親共同同意。
- 促銷郵件中需提供有效的取消訂閱連結;提供帳戶刪除流程。
- 資料外洩應變流程(若涉及風險,需在 72 小時內通知 CNIL)。
區塊 4 — 使用者體驗、SEO 與轉換
- 主要行動呼籲按鈕需清晰易見,且在手機上易於拇指操作。
- 每個頁面需有獨特的標題與實用的中繼描述;需測試 og:image 是否正常顯示;需有 favicon。
- 提供 sitemap.xml、robots.txt、canonical 標籤,私有頁面需加上 noindex;使用 Search Console。
- 自訂 404 頁面,需正確回傳 404 狀態碼;檢查是否有失效連結。
- 常見問答應針對真實的顧客顧慮;承諾的交貨時間應可達成;客戶採取行動後應有感謝頁面。
- 無障礙:色彩對比度、鍵盤導航、焦點可見、替代文字、支援 200% 縮放。
- 效能:LCP ≤ 2.5 秒、INP ≤ 200 毫秒、CLS ≤ 0.1(使用 PageSpeed 測試行動版與桌機版);圖片需經過壓縮。
區塊 5 — 實際上線前測試
- 表單測試:空白、無效輸入、過長輸入、伺服器錯誤、重複點擊、成功提交、接收確認、行動裝置相容性。
- 以測試模式購買並退款;確認含稅總金額、帳單明細正確。
- 實際收到電子郵件(註冊、密碼重設、帳單、客服回覆)。
- Webhooks:需驗證簽章,重複觸發時不應產生重複資料。
- 私密瀏覽模式:未經同意前不應放置任何追蹤器。
- 域名與 DNS 需受 MFA 保護;需能還原至穩定的舊版。
報告格式
- 一行結論:可發布 / 發布前需修正 / 受阻(需指出具體阻斷點)。
- 列出阻斷點,接著依嚴重程度列出需修正項目,每個項目附上確切的修正方式及修改位置。
- 列出無法驗證的項目,以及使用者需要自行執行的測試。
- 提醒:使用者需自行發布。此檢查清單不能替代專業法律建議。