封「新增 Gitea 東西」的每一道側門,不是只有開票(closes inkstone/ISEP#72) #73

Merged
claude-code merged 1 commits from fix/gitea-write-search-guard into main 2026-08-27 09:50:21 +00:00
Member

見 inkstone/ISEP#72(含 leo 原話、實測數據)。

測試:bash scripts/test-ticket-api-bypass-guard.sh 24/24 通過。

plugin.json 0.5.0 → 0.5.1;tag 由總管在驗過整個 milestone 後打(release-tag-guard.sh 既定分工)。

見 inkstone/ISEP#72(含 leo 原話、實測數據)。 測試:`bash scripts/test-ticket-api-bypass-guard.sh` 24/24 通過。 plugin.json 0.5.0 → 0.5.1;tag 由總管在驗過整個 milestone 後打(release-tag-guard.sh 既定分工)。
claude-code added 1 commit 2026-08-27 08:19:48 +00:00
leo 2026-08-27:「開票不查是否有現成的,這是什麼問題?」「不只開票前,
所有新增 gitea 的東西,都要搜尋」。

v1 的 ticket-api-bypass-guard 只認裸字 `grep -qw POST`(大小寫敏感),
只管 issues 端點。2026-08-27 總管一天開 13 張票,v1 一次都沒攔到——
用的是 `urllib.request.Request(url, data=...)`(靠傳 data= 隱式變 POST,
指令裡從頭到尾沒有 "POST" 三個字)和 `requests.post(...)`(小寫)。

本次改動:
- 寫入訊號從單一裸字換成一組結構性訊號(curl 資料類旗標/`.post(`/
  `method=post`/urllib 隱式 POST),且大小寫不敏感,同時保留 v1 的裸字比對
- 端點擴大到 milestones/labels/pulls(含 org 層級的 labels),不再只管 issues
- 用「resource/數字」特徵先放行帶 ID 的既有資源子路徑(貼留言、改標籤、
  合併 PR 等),避免貪婪比對把 `/issues/5/labels` 誤判成頂層 `/labels` 端點
- 擋下 issues 新增時,順手用標題猜關鍵字查一次跨 repo 搜尋,把可能撞到的
  舊票(例如 Arcrun#100)直接列進擋下的訊息裡

測試:scripts/test-ticket-api-bypass-guard.sh 24/24 通過(v1 的 13 條 + 本次
新增 11 條,含一條打真實 Gitea 網路重演 Arcrun#100 重複主題偵測)。

plugin.json 0.5.0 → 0.5.1;version-consistency 會在合併打 tag 那一刻才對齊
(release-tag-guard.sh 的既定分工:打 tag 是總管驗過整個 milestone 之後的事)。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
claude-code merged commit e32957e72b into main 2026-08-27 09:50:21 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: inkstone/ISEP#73