滲透筆記
滲透筆記是綁在單一題目上的記事本,你寫的每一個字都只留在自己的瀏覽器裡。
開啟面板
題目頁面上方導覽列的「筆記」按鈕是唯一能打開這個面板的控制項。螢幕寬度低於 lg 斷點時,按鈕只剩鉛筆圖示,文字會被藏起來。
按鈕上掛著一個數字徽章,顯示這一題目前有幾則筆記。徽章只在數量大於零時才畫出來,所以還沒寫過任何東西的題目是完全看不到徽章,而不是看到一個「0」。
面板打開後,標題列寫的是「滲透筆記」。
面板尺寸
面板標題列上有「最大化」/「還原」、「最小化」與「關閉」。
| 尺寸 | 怎麼進入 | 版面 | 怎麼離開 |
|---|---|---|---|
| 標準 | 面板打開時就是這個尺寸 | 貼齊畫面右緣,寬螢幕佔一半寬度、窄螢幕佔滿寬度,其餘畫面蓋上一層半透明遮罩。清單填滿整個面板;正在編輯時,編輯區佔上半部,清單留在下半部 | 「最大化」、「最小化」、「關閉」,或點一下遮罩的任何位置 |
| 最大化 | 標題列的「最大化」按鈕 | 佔滿整個畫面。寬螢幕時清單佔左邊 30%、編輯區佔右邊 70%;沒有任何筆記在編輯時,右側寫的是「選取一篇筆記進行編輯,或按 + 新增」。窄螢幕一次只看得到其中一側,並有一顆返回鍵從編輯區退回清單 | 「還原」,回到標準尺寸 |
| 最小化 | 標題列的「最小化」按鈕 | 面板消失,畫面右下角改成一顆浮動按鈕。寬螢幕時這顆按鈕帶著文字與同一個筆記數徽章;窄螢幕時只是一顆圓形圖示 | 點那顆浮動按鈕 |
最小化會把面板本體卸載,所以它跟關閉一樣會丟掉沒存的編輯內容。還原之後編輯區會回到同一篇筆記,但顯示的是那篇筆記最後存下的內容。
寫一篇筆記
- 按標題列的 +(「新增筆記」)開一篇新的,或按既有卡片上的鉛筆鈕編輯那一篇。
- 在 Edit 分頁打字。Preview 分頁會把內容當 Markdown 渲染,採 GFM 規則,且單一換行就會斷行。這兩個分頁名稱是寫死的英文,不會翻譯。
- 按「儲存」。
按「取消」會直接結束編輯,剛才打的字一個都不留。
標準尺寸下,編輯區只在打開的那一刻讀一次筆記內容。如果你正在編輯 A 篇、還沒儲存就去按第二張卡片的鉛筆鈕,編輯區裡仍然是 A 的文字——此時按「儲存」就會把 A 的內容寫進第二篇,覆蓋掉原本的內容。同樣情況下按 +,則會生出一篇內容等於 A 的新筆記。請先把一篇存好或取消,再去開另一篇。最大化尺寸沒有這個問題。
點卡片的行為依尺寸而不同:最大化時點一下就直接進入編輯;標準尺寸下點一下只會選取那張卡片。
什麼才算存下
只有按下「儲存」才算把筆記交出去存檔。 打字的過程中不會自動存。
| 你做的動作 | 已存檔的筆記 | 編輯區裡的文字 |
|---|---|---|
| 按「儲存」 | 寫進瀏覽器資料庫,重新整理或關掉分頁再回來都還在 | 清空,結束編輯 |
| 按「取消」 | 不變 | 丟棄 |
| 按「關閉」或點遮罩 | 不變 | 丟棄,沒有任何確認 |
| 按「最小化」 | 不變 | 丟棄 |
| 重新整理或離開頁面 | 不變 | 丟棄 |
沒存的編輯內容不會被寫到任何地方——面板開機時讀的那個草稿鍵,程式只會讀取與移除,從來不會寫入——所以編輯區一被卸載那些字就消失,也沒有任何救回的辦法。
關閉面板會把面板尺寸清回標準尺寸。搜尋框裡的字會留著,所以下次打開時清單可能仍然是篩選過的。已儲存的筆記本身不受影響。
筆記存在哪裡
- 筆記存在你自己瀏覽器的 IndexedDB 資料庫
challenge-tools裡的pentest-notesstore,旁邊還有attack-sessions與code-drafts。任何內容都不會上傳到伺服器。 - 筆記是每一題各自獨立的。開啟某一題只會載入標記為該題資料夾名稱的筆記,不會看到別題的內容。
- 這個鍵是題目資料夾名稱而不是網址,所以同一題的英文版與繁體中文版共用同一份筆記。
有三件事會讓筆記消失:
- 在面板裡刪掉一篇——按下去就立刻刪除,沒有確認步驟;
- 清掉瀏覽器的網站資料,整個資料庫會一起被丟掉,而且救不回來;
- 換一個瀏覽器或換一台裝置開這個網站,那裡根本沒有這個資料庫。
筆記與攻擊紀錄住在不同的 store,所以重新進入已解開的題目不會動到筆記——但那一題的攻擊紀錄會被換掉,見疑難排解。
筆記清單
每張卡片只顯示筆記前兩行非空白的內容;內容全空的筆記顯示「(空筆記)」。預覽下方是建立時間,被重新編輯存過的筆記會在時間後面多一個「(已編輯)」。
卡片上的編輯與刪除按鈕平時是隱藏的,只有滑鼠移到卡片上才出現。觸控裝置沒有 hover,因此按不到這兩顆按鈕。
清單有兩種空狀態:完全沒有筆記時顯示「還沒有筆記,按 + 新增」;有筆記但搜尋不到任何一篇時,改顯示「沒有符合搜尋的筆記」。
搜尋
面板上方的搜尋框只比對筆記內文,且不分大小寫。時間與「(已編輯)」標記都不在比對範圍內。
搜尋框判斷「是不是空的」時會先去頭尾空白,實際拿去比對的卻是沒去空白的原字串。因此多打的前置或後綴空白會被原樣拿去比對,只有筆記內文在同一個位置也有那個空白時才算命中——例如打在最後一個字後面的空白,就對不上以該字結尾的筆記。
排序
排序按鈕在「新→舊」與「舊→新」之間切換,依每篇筆記的建立時間排列。滑鼠移上去的提示會寫出目前的方向,以及點下去會切換成哪一個方向。
刪除筆記
刪除會同時把那篇筆記從清單與資料庫移除。攻擊紀錄裡對應的那一筆事件則原封不動留著——那條時間軸是唯讀累加的——所以被刪掉的文字仍然會出現在匯出的攻擊紀錄裡。
編輯的行為剛好相反:儲存一次編輯會把攻擊紀錄裡那筆事件原地改寫並蓋上更新時間,所以那裡只留得下最新版本。
匯出
兩顆匯出按鈕都長在題目說明欄位的成功訊息旁邊,在你交出正確的 flag 之前,它們兩顆都不存在。
| 按鈕 | 產出 | 檔名 |
|---|---|---|
| 「下載滲透筆記」 | 一個 Markdown 檔,內含這一題所有已儲存的筆記 | pentest-notes-<題目資料夾名稱>-<YYYYMMDD>.md |
| 「下載攻擊紀錄」 | 一個 JSON 檔,涵蓋整場作業:題目說明、HTTP 請求與回應歷程、程式碼執行紀錄、筆記、flag 提交紀錄與時間資訊,開頭還附一段 system prompt,把整份檔案丟給 AI 就能請它寫成 writeup | attack-session-<題目資料夾名稱>-<YYYYMMDD-HHMMSS>.json |
Markdown 檔的第一行是一級標題,把一個固定的繁體中文標籤與題目標題接在一起;那個標籤不會隨介面語系翻譯。接著以每個日曆日一個二級標題分節,每篇筆記以 #### HH:MM 開頭,後面接一條 --- 分隔線。
匯出一律照時間由舊到新排列,不管排序按鈕目前設在哪一邊;它讀的也是完整的筆記集合而不是篩選後的清單,所以搜尋框裡留著的字不會讓匯出漏掉任何一篇。
這兩顆按鈕不會一起消失:
- 答對之後重新整理頁面,兩顆都會消失。成功訊息與兩顆按鈕都要等你再次交出正確的 flag 才會回來。
- 工具資料庫開不起來時,只有「下載攻擊紀錄」會消失。「下載滲透筆記」沒有被同一道條件擋住,仍然會出現——見疑難排解。
如果你的作業沒有被記錄
題目頁最上方出現一條橘色警告、標題寫著「這次作業沒有被記錄」時,代表你寫的東西沒有進到儲存空間——成因與處理方式請看疑難排解。