讓我描繪一個我知道你最近一定經歷過的畫面。
你正試著訂機票、買演唱會門票,或只是下載一個簡單的 PDF 轉檔工具。突然,網站瞬間變成一個徹底的戰場:
🚨 「這個價格只剩 2 個座位!」
⏳ 血紅色的倒數計時器從 05:00 開始滴答倒數。
🟢 三個巨大、發光的「立即下載」按鈕出現了,而你 知道 其中兩個會安裝惡意軟體。
🥺 而當你試著關閉彈出視窗時呢?唯一的按鈕寫著:「不用了,謝謝,我寧願付全價然後痛苦地接受。」
我們把這叫做「行銷」。但老實說,這根本就是欺騙性的工程設計。
這些就是 Dark Patterns(黑暗模式)——刻意設計成用來欺騙、讓你產生罪惡感,或強迫你做出原本不想做的事情的 UI/UX 設計。說真的?這種做法越來越噁心了。身為開發者,我們在打造網路世界;我們不應該坐視網頁主動操弄使用者。
所以,我在 Tarkash Labs 的團隊決定反擊。我們打造了一個認知視覺防護罩,能即時偵測這些模式。
這就是 OmniGuard AI。
https://www.youtube.com/watch?v=vR4NOdhGkRE
大多數廣告攔截器或隱私擴充功能的問題在於,它們依賴靜態黑名單或 CSS 選擇器。但現代的黑暗模式是動態的。它們偽裝成一般的 DOM 元素。
要抓出它們,我們需要一個能 像人類一樣看見 網頁的工具。
我們將 OmniGuard 建造成一個 Manifest V3 Chrome 擴充功能,後端由 FastAPI 與 Gemini 3.7 Flash 驅動。
以下是完整流程:
1.「眼睛」(React 18 + Vite 擴充功能):
當你點擊「Scan」(或啟用捲動時自動掃描)時,擴充功能會擷取目前可視區域的一張短暫、高壓縮的截圖。
2.「大腦」(FastAPI + Gemini 3.7 Flash):
這張圖片會傳送到我們無狀態的 FastAPI 後端。我們使用 Gemini 3.7 Flash 的多模態能力來分析頁面的視覺脈絡。它不只是讀取程式碼;它還能理解 UI 看起來是什麼樣子。
3.「防護罩」(Shadow DOM 注入):
如果 Gemini 偵測到黑暗模式,後端就會把精確座標串流回擴充功能。接著我們會在頁面上注入一層 Shadow DOM,直接在欺騙性元素上繪出發光的紅色外框,並且完全隔離我們的 CSS 與宿主頁面的樣式。
OmniGuard 目前設定為偵測六種特定類型的視覺欺騙。以下是它在實際網站上如何抓到這些手法:
1. 偽裝點擊
把按鈕偽裝成別的東西(例如看似下載,實際上卻導向廣告或惡意軟體的假下載)。

2. 道德綁架式確認(Confirmshaming)
帶有罪惡感的取消訂閱文案,試圖讓你因為不訂閱而感到愧疚。

3. 緊迫感陷阱
假的倒數計時與人為製造的稀缺訊息。

4. 隱藏費用(滴灌式定價)
在結帳流程最後才神奇出現的手續費與未包含的稅金。

5. 偷偷放進購物車
在下載或結帳時,未經同意就預先勾選的不想要的軟體套裝或保險。

6. 強制續訂
把激進自動續約條款藏在細則裡的「免費試用」。

打造一個會截圖瀏覽器的 AI 擴充功能時,最大的挑戰之一就是 隱私。從一開始我們就知道,如果我們要做的是保護使用者的工具,就不能為了達成這件事而犧牲他們的資料。
這就是為什麼 OmniGuard 後端是 100% 無狀態 的。它採用零資料庫架構。可視區域截圖只會在記憶體中存在 Gemini 處理它所需的那幾毫秒,然後立刻被銷毀。沒有任何內容會被儲存、記錄或留存。
我們已經把整個專案開源。如果你想看看我們如何處理 Manifest V3 的分頁擷取,或是我們如何提示 Gemini Flash 進行 UI 座標對應,可以到這裡查看原始碼:
{% github Tarkash-Labs/OmniGuard
非常感謝我的隊友 Yug Vasava(主程式開發)和 Avadh Vaishnani(主 QA)協助把這個專案實現出來。
我們一直努力提升 AI 的偵測能力。
你最近看過哪一種最不道德、最讓人生氣,或最噁心的黑暗模式,是某家公司用過的?
歡迎在下方留言,我們會用它來訓練 OmniGuard 把它抓出來!🚀