當有人請 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。
  • 每個簽章由 created 至 expires 的有效期為 60 秒。
  • 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,而非使用者代理字串。

備註

使用桌面應用程式時,使用者也可以讓 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 機械人政策: 在 Security Settings 中,選擇 Configure AI bot policies。在 Agent 下,選擇 Allow (do not block)、Block on pages with ads 或 Block (on all pages)。
  • 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(如有)。