剪貼內容無法離開電腦
整個程式中只有一個檔案 net.py 可以開啟連線,而它唯一的函式 get_json(url, allowed) 沒有任何能攜帶請求內文的引數。沒有任何程式路徑會上傳剪貼內容,因為根本沒有可以用來上傳的東西。
每次推送時由 scripts/check_network.py 強制檢查:只要有其他模組匯入網路函式庫,或閘道函式多出 data、body、payload、content 或 text 引數,組建就會失敗。
這些不是要靠人記住的方針:每一項都由檢查或測試把關,違反就會讓組建失敗。
整個程式中只有一個檔案 net.py 可以開啟連線,而它唯一的函式 get_json(url, allowed) 沒有任何能攜帶請求內文的引數。沒有任何程式路徑會上傳剪貼內容,因為根本沒有可以用來上傳的東西。
每次推送時由 scripts/check_network.py 強制檢查:只要有其他模組匯入網路函式庫,或閘道函式多出 data、body、payload、content 或 text 引數,組建就會失敗。
程式沒有使用統計、當機回報或分析功能。設定檔中仍留有 telemetry 欄位,但沒有任何程式碼會讀取它來傳送東西;而且每次載入或儲存設定時,無論檔案內容為何,Config.normalize() 都會把它強制設為 false。
src/clipvault/config.py — 每次載入與儲存都會經過 normalize()。
全新安裝時兩者皆為關閉,ClipVault 會在首次執行時詢問。拒絕,它就從不建立連線。同意,它每天會送出一次 HTTPS GET,取得一個小型版本檔 — 沒有內文、沒有 Cookie、沒有識別碼;它唯一加上的標頭只載明 ClipVault 及其版本。純 HTTP 與重新導向一律拒絕,超過 64 KB 的回應會被捨棄。
net.get_json、updates.fetch。組織可以用 DisableUpdateCheck 與 DisablePromos 原則將兩者都關閉。
版本檔是程式抓取來的資料,而不是它信任的資料。其中的連結只有在是 ClipVault 網站上的路徑,或同一主機上的 https 位址時才會保留,因此遭竄改的檔案無法把您引導到仿冒的下載處。版本號碼只接受數字與點,所以也無法夾帶訊息。
updates.official_link、updates.clean_version — 快取中的副本也同樣套用。
上方方框中的一切都在您的電腦上、您的 Windows 帳戶之下進行。下方方框是程式唯一的網路路徑,它無法存取您的剪貼內容。
關卡。應用程式標記為「不要記錄」的剪貼內容(即 KeePass、1Password 與 Bitwarden 設定的標準標記)連讀都不會讀。來自排除的應用程式的剪貼內容會在儲存前被捨棄;預設清單涵蓋密碼管理程式與韓國網路銀行安全模組。組織原則可以新增應用程式,並關閉圖片或檔案擷取。win/clipboard.read、Vault._gate
失敗即拒絕(fail-closed)的加密。憑證以 Windows DPAPI 加密並移除其文字,因此永遠不會進入搜尋索引。若 DPAPI 無法使用或失敗,該剪貼內容會被捨棄,而不是以明文保留。Vault._protect
儲存。首次執行時,資料夾會停止繼承權限,並明確授權給您的帳戶,因此上層資料夾的變更無法放寬它的權限。憑證以加上金鑰的雜湊去除重複,因此資料庫中不會留下可供猜測其值的指紋。win/acl.harden_once、Vault._dedupe_key
貼上。ClipVault 會把焦點還給您原本所在的視窗,並在送出 Ctrl+V 的前一刻再次確認它位於前景。若無法確認,就什麼都不送,剪貼內容會留在剪貼簿上等您處理。它放上剪貼簿的憑證本身也帶有「不要記錄」標記,因此 Windows 剪貼簿歷程記錄與其他管理程式會略過它。actions.deliver、win/exclusions.exclusion_payloads
清除。您貼上憑證後,剪貼簿預設會在 30 秒後清空 — 但前提是這段期間沒有複製新的內容。actions.clear_if_unchanged
網路。請求由一個只接受位址與您的同意、其餘一概不收的函式發出,因此任何剪貼資料都不在它能觸及的範圍內。它拒絕純 HTTP 與重新導向,並捨棄超過 64 KB 的回應。net.py、updates.fetch
本機程式可以讓某些攻擊變得更困難,但無法讓已遭入侵的 Windows 帳戶變得安全;若聲稱可以,只會讓您依賴錯誤的東西。
這與程式在 管理主控台 → 安全 中說明的界線相同:加密保證的是單憑資料庫檔案本身無法被讀取,僅此而已。
偵測只會為剪貼內容加上標籤,絕不會刪除。被標記為憑證的剪貼內容會加密並遮住。只有在您或您組織的原則開啟該選項時,才會拒絕儲存。
標籤加上值 — 「password:」、「비밀번호:」、「contraseña=」,以及應用程式支援的全部 12 種語言中代表密碼的詞,也包括全形冒號。還有 scheme://user:password@host 形式的位址。
OpenAI、Anthropic、Stripe、GitHub、GitLab、npm、SendGrid、AWS、Slack 與 Google 的已知格式;帶標籤的值,例如 api_key= 或 client_secret:;.env 中的行,例如 DB_PASSWORD=;Azure 連接字串中的金鑰。
Slack 與 Discord 的 webhook 位址,這些位址本身就是憑證。
PEM 私密金鑰區塊。
以 eyJ 開頭的三段 base64url。
通過 Luhn 檢查的 13 到 19 位數字。0000 0000 0000 0000 這類預留數字會被忽略。
會核對日期與檢查碼。
標記為個人資料,但不加密:人們是刻意複製它們的。
每次複製都會執行偵測,因此一個緩慢的模式就可能讓快速鍵凍結。每個模式中的每一處重複都設有上限;測試會輸入 14 種對抗性輸入,若輸入變為 4 倍而耗時增加超過 8 倍便判定失敗 — 那正是災難性回溯的特徵。每筆剪貼內容只掃描前 1,000,000 個字元,程式儲存的文字也絕不會超過它掃描的範圍。
sensitive.DETECT_LIMIT、Config.normalize、tests/test_security.py
IT 部門可以透過群組原則或 Intune,在 HKLM\SOFTWARE\Policies\ClipVault 下強制套用設定。電腦與使用者兩種原則機碼都會讀取,並採用較嚴格的值;標準使用者無法寫入其中任何一個。
零件越少,他人程式碼能混進來的地方就越少。
scripts/check_stdlib_only.py 會讀取每一個 import,只要出現其他東西就讓組建失敗。scripts/check_network.py 讓網路程式碼只存在於 net.py 中,並確保其中不會出現任何內文引數。ClipVault.exe 由 PROJECTTEAMFORYOU 透過 Azure Artifact Signing 簽署。若要確認,請在檔案上按右鍵 → 內容 → 數位簽章。設定好簽署後,組建若未簽署就不會完成,而且在檔案離開組建電腦之前,會再次驗證簽章。
網站會計算下載次數,讓我們知道哪些檔案有人使用。它保留的是計數,而不是日誌。
續傳的下載與爬蟲不計入,程式的更新檢查也完全不計入 — 同意檢查版本並不等於同意被計數。deploy/cloudflare/lib/downloads.js
我們自己廣告的點擊——無論在本網站,或在您開啟消息後程式中的消息——都以相同方式計數:日期、廣告與國家。程式絕不在彈出視窗中顯示廣告,也絕不顯示其他任何人的廣告。deploy/cloudflare/lib/ads.js
請透過電子郵件私下通報,讓問題能在公開之前修正。
我們的目標是在 3 個工作天內確認收到通報,並與您議定修正方式與揭露日期。這是目標,而非保證:ClipVault 是由小型團隊製作的。
clipvault-cli --version)與您的 Windows 版本請不要寄送真實的密碼或他人的剪貼簿資料,並且只在屬於您自己的電腦與帳戶上測試。
我們沒有付費的漏洞獎勵計畫。如果您願意,我們會在版本資訊中具名致謝。