當使用者請 Dvina 執行需要實際瀏覽器的工作時,Dvina 的瀏覽器會代他造訪網站,每次只為一位使用者服務。本頁供網站擁有者參考,說明這個瀏覽器的運作方式、如何辨識它的請求,以及如何允許或封鎖它。
這是什麼
Dvina 是個人助理。已登入 Dvina 的使用者請它執行需要使用網站的工作時,例如比較優惠或填寫使用者指定的表單,Dvina 可以在該使用者的 Dvina 電腦上,使用自己的瀏覽器完成工作。這是有視窗的桌面版 Chromium,不是無頭瀏覽器;使用者可以即時觀看,並隨時接手操作。
- 它只為一位使用者操作。 每個瀏覽器都屬於一位已登入的 Dvina 使用者,只執行該使用者要求的工作。
- 它不是爬蟲。 它沒有會自行造訪的網站清單,而是依工作需要,一步一步開啟網頁:載入頁面、閱讀內容,再進行操作,就像人一樣。
- 絕不用於訓練模型。 Dvina 的瀏覽器在你的網站上讀取的內容,只用於處理它所服務的使用者提出的請求,絕不會用來訓練 AI 模型。
- 需要使用者自己決定的事,會留給使用者。 它不會輸入密碼或卡片資料。當頁面需要使用者登入或付款時,Dvina 會停止操作,請使用者接手。涉及個人資料、傳送、付款和刪除的操作,都會等待使用者同意。
- 它不會完成真人驗證。 遇到確認是否由真人瀏覽的驗證,例如 Cloudflare 的驗證、Turnstile、reCAPTCHA 或 hCaptcha 時,它不會點擊、解答或重新載入驗證。如果驗證會自行通過,Dvina 會等待;如果驗證持續存在,工作就會停止,由使用者接手瀏覽器、通過驗證,再交回給 Dvina。
辨識它的請求
Dvina 的瀏覽器會使用 Web Bot Auth,以 Ed25519 金鑰為它送出的每個 http 和 https 請求加上 HTTP 訊息簽章(RFC 9421)。每個請求都帶有三個標頭:
Signature-Agent: "https://api.dvina.ai"
Signature-Input: sig1=("@authority" "signature-agent");created=<unix time>;expires=<created + 60>;keyid="<key id>";alg="ed25519";nonce="<random>";tag="web-bot-auth"
Signature: sig1=:<Ed25519 signature>:
Signature-Agent指向 Dvina,也就是公布其金鑰的來源站點。Signature-Input涵蓋請求的@authority(你的主機)和Signature-Agent標頭。tag為web-bot-auth。- 每個簽章的有效期限為 60 秒,從
created到expires。 keyid是金鑰的 JWK 指紋(RFC 7638)。
這個瀏覽器送出的是 Chromium 本身的使用者代理字串,與 Linux 上的任何 Chromium 相同,例如:
Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36
它的 Chrome 版本會隨 Chromium 更新而變動,使用者代理字串也不會提及 Dvina。請透過簽章辨識 Dvina,而不是使用者代理字串。
備註
使用桌面版 App 時,使用者也可以讓 Dvina 使用自己電腦上的瀏覽器。這個瀏覽器不會為請求加上簽章,看起來就像使用者自己在瀏覽。
驗證簽章
Dvina 在其金鑰目錄中公布公開金鑰:
https://api.dvina.ai/.well-known/http-message-signatures-directory
目錄的回應包含 Content-Type: application/http-message-signatures-directory+json,以及含有 Dvina 的 Ed25519 公開金鑰的 JSON Web Key Set。回應使用同一把金鑰簽署,並帶有 tag="http-message-signatures-directory"。
如果你的網站使用 Cloudflare,Cloudflare 會代你驗證已簽署的代理。若要自行驗證請求:
- Check that
Signature-Agentis"https://api.dvina.ai"and thatSignature-Inputhastag="web-bot-auth". - Check that the time now is between
createdandexpires. - Get the key directory and pick the key whose JWK thumbprint matches
keyid. - Build the signature base from
@authority,signature-agentand the signature parameters, as RFC 9421 describes, and verify theSignaturewith that Ed25519 key.
任何人都能送出這些標頭。只有在使用 Dvina 的金鑰目錄成功驗證簽章後,才能將請求視為來自 Dvina。
允許或封鎖它
Dvina 的瀏覽器會即時為單一使用者執行操作,這類流量屬於 Cloudflare 的 Agent 預設類別。如果你的網站使用 Cloudflare:
- AI 機器人政策:在安全性設定中,選擇設定 AI 機器人政策。針對 Agent,選擇允許(不封鎖)、在含有廣告的頁面上封鎖或封鎖(所有頁面)。
- **WAF 自訂規則:**來自已驗證機器人和已簽署代理程式的請求,其
cf.client.bot(使用 Bot Management 時為cf.bot_management.verified_bot)會設為 true。你可以在自訂規則中使用此欄位,對這些請求略過檢查、發出驗證挑戰或加以封鎖。 - **已驗證機器人目錄:**在 Cloudflare Radar 查看 Cloudflare 驗證的代理程式。
Anywhere else, verify the signature as described above, then allow or block requests whose verified Signature-Agent is "https://api.dvina.ai".
聯絡我們
對 Dvina 瀏覽器在你網站上的操作有疑問,或發現某個請求的行為與本頁說明不符?請寄信至 support@dvina.ai,提供你的網站網址;如果有請求的時間和 keyid,也請一併提供。