第 25 堂|公開資訊與管理權限,分清楚

只用虛構資料,查前端秘密、後端授權與文字輸出。

3 小時 · 六個步驟 · 54 分鐘觀念+126 分鐘實作

自己已勾選 0/6 步
步驟 1/6 · 觀念 18 分鐘

前端任何人都能下載

公開檔不含假秘密,apiBase與正常功能保留。

先準備

  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 01-public-fake-secret的config.js、公開檔案清單、FAKE_NOT_A_REAL_SECRET_L25

HTML/CSS/JS不是秘密保存區。先列公開與私有檔案,再從獨立假秘密故障練習定位,不引入真實帳密。

先分清自己的作品、線上畫面與可啟動參考包;線上參考不提供API,請在本機閱讀隨包OPEN_REFERENCE.html後操作。

一起拆解:公開檔不放秘密

本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。

這次的輸入

隔離教學config.js多了明示假字串FAKE_NOT_A_REAL_SECRET_L25。

公開:HTML、JS、CSS、assets、apiBase
後端環境:ADMIN_PASSWORD
私有:案件JSON、備份manifest

這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。

一步一步推演

  1. 只在指定故障包找明示假字串,不搜尋或輸出自己的真實密碼。
  2. 移除假秘密宣告,不移到另一前端檔;apiBase是公開網址要保留。
  3. 以實際檔案清單核對發布根目錄,再測正常詢問與登入。

正常應看到

公開檔沒有假秘密,必要公開設定與功能保留。

常見錯誤對照

改變數名或壓縮JS不能讓瀏覽器下載的秘密變成私有。

先預測,再說明原因

apiBase與ADMIN_PASSWORD為何不能用同一種公開設定方式?

跟著觀察

  1. 先讀「公開檔不放秘密」的輸入,指出本關實際檔案或資料。
  2. apiBase與ADMIN_PASSWORD為何不能用同一種公開設定方式?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 公開檔不含假秘密,apiBase與正常功能保留。
  • 能指出指定檔案與作用範圍。
接著進行第 2 步
步驟 2/6 · 實作 42 分鐘

公開的程式,不能放秘密

公開檔不含假秘密,apiBase與正常功能保留。

先準備

  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 01-public-fake-secret的config.js、公開檔案清單、FAKE_NOT_A_REAL_SECRET_L25

自己列公開檔、後端環境與私有資料三類。

跟著做

  1. 開01-public-fake-secret,只找明示FAKE教學字串。
  2. 請AI依附清單只移除前端假秘密宣告,保留公開apiBase。
  3. 檢查全部公開檔與發布根,不把秘密改名或移到另一個前端檔。

移除公開前端的假秘密

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 01-public-fake-secret的config.js、公開檔案清單、FAKE_NOT_A_REAL_SECRET_L25
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI依附清單只移除前端假秘密宣告,保留公開apiBase。
  • 能說明公開檔、後端設定、私有資料三種範圍。
4.自己檢查結果
  • 公開檔不含假秘密,apiBase與正常功能保留。
  • 能說明公開檔、後端設定、私有資料三種範圍。
移除公開前端的假秘密 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:承接第24堂service-site;正常後端已做授權與白名單,不為教學刪掉防護。兩個獨立故障:前端FAKE假秘密與本機8782匿名放行後端,各只一原因。只在自己的隔離副本測,禁止正式站掃描。

本次任務:只處理自己的01-public-fake-secret教學副本:config.js多了window.DEMO_SECRET="FAKE_NOT_A_REAL_SECRET_L25"(明確假字串)。指出前端公開可下載的原因,只移除該宣告與故障註解,不把秘密改名、混淆、藏到另一JS,也不刪公開apiBase或把正常後端功能拿掉。依實際檔案清單列HTML/JS/CSS/assets公開、ADMIN_PASSWORD後端環境、cases私有目錄的界線;不讀取/輸出真實秘密。列搜尋假字串、正常詢問與登入回歸,不能稱全面安全。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 公開檔不含假秘密,apiBase與正常功能保留。
  • 能說明公開檔、後端設定、私有資料三種範圍。

線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。

下載本關可啟動參考包

看參考包啟動與資料保留步驟

接著進行第 3 步
步驟 3/6 · 觀念 18 分鐘

藏按鈕不能保護API

匿名三種管理操作被真正後端拒絕。

先準備

  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 隔離fault-L25 server.mjs授權片段、匿名三種回應與API契約

檢查匿名列表、明細與更新的真實拒絕。獨立故障後端放行匿名,只能本機隔離測,修復後合法管理仍可用。

一起拆解:測授權,直接看API

本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。

這次的輸入

獨立8782故障後端的requireAdmin在無session時錯誤放行。

匿名 GET列表 → 預期401
匿名 GET明細 → 預期401
匿名 PATCH → 預期401

這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。

一步一步推演

  1. 只在8782與獨立虛構資料執行,正常8780環境保留。
  2. 依契約恢復未登入回401及return null,由講師核對後端差異。
  3. 再合法登入測同案讀寫;不靠藏按鈕代表API已保護。

正常應看到

匿名被拒絕,合法流程仍可操作。

常見錯誤對照

只在前端加if(isAdmin)不會修復後端放行。

先預測,再說明原因

修後連管理員也不能讀案時,要如何分辨過度修復?

跟著觀察

  1. 先讀「測授權,直接看API」的輸入,指出本關實際檔案或資料。
  2. 修後連管理員也不能讀案時,要如何分辨過度修復?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 匿名三種管理操作被真正後端拒絕。
  • 能指出指定檔案與作用範圍。
接著進行第 4 步
步驟 4/6 · 實作 42 分鐘

登入限制,要由後端確認

匿名三種管理操作被真正後端拒絕。

先準備

  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 隔離fault-L25 server.mjs授權片段、匿名三種回應與API契約

親手列匿名/登入三種API預期,不從畫面推論授權。

跟著做

  1. 用02-server-auth-bypass獨立副本、8782與虛構資料啟動,不連原環境。
  2. 請AI比較正常requireAdmin與故障放行,列最小後端修正交講師核對。
  3. 修後匿名列表/明細/PATCH401,合法管理同案讀寫正常。

修復後端匿名授權放行

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 隔離fault-L25 server.mjs授權片段、匿名三種回應與API契約
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI比較正常requireAdmin與故障放行,列最小後端修正交講師核對。
  • 合法登入與同案讀寫保留,隔離環境不混用。
4.自己檢查結果
  • 匿名三種管理操作被真正後端拒絕。
  • 合法登入與同案讀寫保留,隔離環境不混用。
修復後端匿名授權放行 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:承接第24堂service-site;正常後端已做授權與白名單,不為教學刪掉防護。兩個獨立故障:前端FAKE假秘密與本機8782匿名放行後端,各只一原因。只在自己的隔離副本測,禁止正式站掃描。

本次任務:只在本機隔離02-server-auth-bypass、PORT8782與獨立虛構DATA_DIR:requireAdmin在沒有session時回DEMO-UNSAFE,導致匿名列表/明細/PATCH可讀寫。依契約恢復沒有row時problem401 unauthorized並return null;其他已登入路線保留。由講師核對最小後端差異,不只藏按鈕、不把401改200、不拿正式站測。列匿名GET列表、GET同id、PATCH各401,合法登入me與同案狀態/備註重讀,公開API無內部欄位與復原隔離設定。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 匿名三種管理操作被真正後端拒絕。
  • 合法登入與同案讀寫保留,隔離環境不混用。

線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。

下載本關可啟動參考包

看參考包啟動與資料保留步驟

接著進行第 5 步
步驟 5/6 · 觀念 18 分鐘

公開JSON與畫面要分開查核

標籤字串不執行,公開JSON沒有內部欄位。

先準備

  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 公開services/receipt、匿名拒絕與標籤字串的實際DOM證據

標籤形狀文字仍應是文字;公開頁沒有顯示內部備註,也要檢查JSON本身沒有洩漏。

一起拆解:把標籤當文字呈現

本關18分鐘觀念:3分鐘看輸入、6分鐘逐步推演、5分鐘正常與錯誤對照、4分鐘先預測再說明。

這次的輸入

用虛構主旨及備註<strong>測試</strong>保存後重讀。

element.textContent = value;
textarea.value = value;
// 不把輸入指定給innerHTML

這段是觀念縮圖,完整可操作檔案在本關參考成果;請依當前階段判讀,不把片段直接貼到任意位置。

一步一步推演

  1. 先確認畫面顯示完整尖括號,不把標籤當HTML執行。
  2. 核對公開services與receipt白名單,管理資料不進公開回應。
  3. 以正常登入、匿名拒絕與實際DOM證據列查核表;符合就不重寫。

正常應看到

輸入以普通字串顯示,內部欄位受保護。

常見錯誤對照

只因頁面沒看到備註就填安全通過,漏查了JSON是否洩漏。

先預測,再說明原因

這項檢查能證明哪些範圍?為何不能宣稱網站全面安全?

跟著觀察

  1. 先讀「把標籤當文字呈現」的輸入,指出本關實際檔案或資料。
  2. 這項檢查能證明哪些範圍?為何不能宣稱網站全面安全?
  3. 依例子逐步說明正常結果與錯誤差別,再記下自己的預測;參考結果不是已完成的實測。

做完,自己確認

  • 標籤字串不執行,公開JSON沒有內部欄位。
  • 能指出指定檔案與作用範圍。
接著進行第 6 步
步驟 6/6 · 實作 42 分鐘

把輸入當文字,再核對公開欄位

標籤字串不執行,公開JSON沒有內部欄位。

先準備

  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 公開services/receipt、匿名拒絕與標籤字串的實際DOM證據

自己輸入<strong>測試</strong>作虛構主旨與備註,重讀查看。

跟著做

  1. 回正常參考後端,實際保存與重讀標籤文字。
  2. 請AI按契約檢查公開白名單、安全輸出與授權證據,缺證據列待測。
  3. 回歸合法流程及匿名拒絕,交安全檢查紀錄及限制。

查核文字輸出與公開資料邊界

主要使用 Cursor 內建 AI;先附資料,再送出指令。

1.附上這些檔案與資料
  • 自己的service-site/frontend相關HTML、inquiry.js、admin.js、config.js與styles.css
  • 隨包API_CONTRACT.html、TEST_MODES.html與真正教學後端;不貼密碼、Cookie、內部真實資料
  • 公開services/receipt、匿名拒絕與標籤字串的實際DOM證據
2.貼到哪裡
  1. 在 Cursor 開啟自己的本關練習副本,進入內建 AI 對話;正常版與故障副本分開。
  2. 用 @ 附上本關指定檔案,核對完整路徑;補實際觀察、輸入與結果,再貼下方 Prompt。
  3. 先讀回覆與差異,只保存指定範圍;回到瀏覽器實際檢查。版本保存由自己操作,不讓 AI 代替驗收或提交。
3.預期回覆與操作
  • 請AI按契約檢查公開白名單、安全輸出與授權證據,缺證據列待測。
  • 報告分已驗證、未測及限制,不用畫面推論安全。
4.自己檢查結果
  • 標籤字串不執行,公開JSON沒有內部欄位。
  • 報告分已驗證、未測及限制,不用畫面推論安全。
查核文字輸出與公開資料邊界 Prompt(可收合)

你是協助零基礎學員的網站開發助手。我使用 Cursor 免費版編輯原生 HTML、CSS、JavaScript;必要時把你提供的內容手動貼入檔案。

情境與本次輸入:承接第24堂service-site;正常後端已做授權與白名單,不為教學刪掉防護。兩個獨立故障:前端FAKE假秘密與本機8782匿名放行後端,各只一原因。只在自己的隔離副本測,禁止正式站掃描。

本次任務:依附正常實作及去敏感證據,檢查name/subject/message/internalNote以textContent或value輸出,不能innerHTML;<strong>測試</strong>要顯示普通字串。公開GET services外層只services、項目id/name;POST receipt只id/status/createdAt,不能含internalNote、password、requestFingerprint或堆疊。匿名管理列表/明細/PATCH仍401,合法同id讀寫正常。若現有實作符合只產有證據的查核表,不為了修改而重寫;缺項列精確最小差異與待測,不稱全面安全,不對正式站掃描。

請先閱讀我附上的相關檔案或資料,資訊缺漏時精確列出需要補充的項目,不猜檔名、API 或測試結果。說明以繁體中文撰寫,指出檔案與修改位置;檢查結果區分已知、待驗與未完成。只處理學生自己的練習副本,不改現有展示網站,不要求付費訂閱。
Cursor AI 無法使用?改用 ChatGPT 備援

把上方指定的檔案內容、清單與補充資料,連同同一份 Prompt 貼入 ChatGPT 對話。只貼電腦上的路徑,無法讓它讀取你的檔案。

收到程式碼時,先核對檔名與修改位置,再手動存回自己的練習副本;若收到檢查表或補檔步驟,就逐項操作。不要把 Prompt 或程式碼框的反引號貼進 HTML/CSS。

兩邊都受限時,可先看既有參考成果、檢查差異與手動修改;未做過的 AI 生成或公開發布仍記待完成。不要貼入帳密、金鑰或真實個資。

複製只取得 Prompt 文字,檔案需自行在 Cursor 附上;本頁不會呼叫 AI 或自動完成關卡。

做完,自己確認

  • 標籤字串不執行,公開JSON沒有內部欄位。
  • 報告分已驗證、未測及限制,不用畫面推論安全。

線上只看前端畫面;完整操作請下載。本頁不提供案件API。把參考包解壓到新的資料夾,先讀 OPEN_REFERENCE.html,再啟動隨包後端;不要覆蓋自己的作品或案件。

下載本關可啟動參考包

看參考包啟動與資料保留步驟

留下本堂檢查紀錄

留下自己的檢查紀錄

記下實際做過的操作、差異與結果。還沒做的項目寫「待完成」。

勾選與筆記只保存在這個瀏覽器。

重設只清除勾選,網站檔案與檢查筆記都保留。

帶著這一步,繼續往前。

保留正常作品與實際檢查紀錄;未完成的操作可以回來補做。

帶著作品,進入第 26 堂