当用户请求 Dvina 执行需要使用真实浏览器的任务时,Dvina 的浏览器会为该用户访问网站,一次只服务一人。本页面向网站所有者,介绍这个浏览器的工作方式、如何识别它的请求,以及如何允许或屏蔽它。

它是什么

Dvina 是一款个人助手。当已登录 Dvina 的用户请求执行需要使用网站的任务,例如比较优惠方案或按其要求填写表单时,Dvina 可以在该用户的 Dvina 电脑上,使用自己的浏览器完成任务。这是一个带有窗口的桌面版 Chromium,而不是无头浏览器。用户可以实时查看操作,并随时接管。

  • 它只为一位用户执行任务。 每个浏览器都属于一位已登录的 Dvina 用户,并按该用户的请求执行任务。
  • 它不是爬虫。 它没有会自行访问的网站列表,而是根据任务需要逐步打开页面:加载页面、阅读内容,然后进行操作,就像人一样。
  • 内容绝不用于训练模型。 Dvina 的浏览器在你的网站上读取的内容,仅用于处理它所服务用户的请求,绝不用于训练 AI 模型。
  • 需要用户自己做的决定,仍由用户做出。 它不会输入密码或银行卡信息。当页面需要用户登录或付款时,Dvina 会停止操作,请用户接管。涉及个人信息、发送、付款和删除的操作,都要等待用户同意。
  • 它不会完成真人验证。 遇到用于确认浏览者是真人的验证,例如 Cloudflare 的验证、Turnstile、reCAPTCHA 或 hCaptcha 时,它不会点击、破解或重新加载验证。如果验证会自动通过,Dvina 就会等待。如果验证持续存在,任务就会停止,由用户接管浏览器,完成验证后再交回给 Dvina。

识别它的请求

Dvina 的浏览器会使用 Ed25519 密钥,通过 Web Bot Auth 的 HTTP 消息签名(RFC 9421),为它发出的每个 http 和 https 请求签名。每个请求都包含三个标头:

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,而不是通过用户代理字符串。

说明

使用桌面 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(如果有)。