當使用者請 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 會代你驗證已簽署的代理。若要自行驗證請求:

  1. Check that Signature-Agent is "https://api.dvina.ai" and that Signature-Input has tag="web-bot-auth".
  2. Check that the time now is between created and expires.
  3. Get the key directory and pick the key whose JWK thumbprint matches keyid.
  4. Build the signature base from @authority, signature-agent and the signature parameters, as RFC 9421 describes, and verify the Signature with 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,也請一併提供。