讓使用者上傳檔案、存在伺服器的某個目錄底下,是很常見的需求。最直覺的寫法只要兩行,但這兩行藏了三個問題:檔名可以跳出目錄、寫到一半當機會留下殘檔、讀檔時可能被一個 FIFO 卡住整個 goroutine。 這篇從最直覺的寫法開始,逐一修掉這三個問題。主角是 Go 1.24 新增的 os.Root。
服務啟動時把連線字串印到 log,方便確認連到哪台機器,這是很常見的寫法。Go 的 net/url 有一個 Redacted(),看名字會以為它能把敏感資訊遮掉,但它只遮「密碼」這一格。很多連線字串的祕密根本不放在那一格。 這篇用實際跑過的測試,整理 Redacted() 會漏掉的幾種情況,以及 url.Parse 錯誤訊息的同類問題,最後給一個簡單的替代寫法。
Vite 打包的 SPA 部署新版之後,常會收到這種回報:「選單點了沒反應,重新整理就好了。」原因是使用者的分頁還停在舊版,舊版要載入的 chunk 在伺服器上已經不存在了。 Vite 官方文件提供了 vite:preloadError 事件,範例只有一行 window.location.reload()。這一行能解決大部分情況,但它沒處理無限重整、同一次失敗觸發好幾次,也沒顧慮使用者手上正在進行的工作。這篇從官方範例出發,逐一補上這些狀況。
在 CLAUDE.md 寫「不要 force push」,模型大多會遵守,但「大多」不夠。Claude Code 的 PreToolUse hook 會在每次工具呼叫之前執行你的腳本,由腳本決定放行或擋下,模型沒辦法用說理的方式繞過去。 寫 hook 時最容易忽略的問題是:hook 自己出錯的時候該怎麼辦? 擋危險指令的護欄,出錯時應該擋下(fail-closed);只是提醒的 hook,出錯時應該安靜放行(fail-open)。這篇用兩支 bash 腳本說明這兩種設計。
使用者在未登入時打開 /orders/42,前端把他導到 /login?redirect=/orders/42,登入成功後再導回去。這個流程幾乎每個 SPA 都有,但 redirect 是網址上的參數,誰都能改。只要改成 ?redirect=https://evil.com,使用者就會在剛輸入完帳號密碼、最信任你的那一刻,被送到攻擊者的頁面。這就是 open redirect。 這篇從最常見的檢查開始,說明它怎麼被繞過,再一層一層補起來。
紀錄 Javscript 相關筆記
前言 前段時間公司同事出現了跨域問題 , 雖然我知道了大略的解決方案 , 但是說實在的真實真實的跨域知識及領域 , 不是了解得很透徹 , 趁這個機會好好查一下文章記錄下來