Als Markdown anzeigen

Der Browser von Dvina besucht Websites jeweils für eine einzelne Person, wenn diese Dvina um etwas bittet, das einen echten Browser erfordert. Diese Seite richtet sich an Website-Betreiber: Sie erklärt, was der Browser tut, wie du seine Anfragen erkennst und wie du ihn zulassen oder blockieren kannst.

Was ist das?

Dvina ist ein persönlicher Assistent. Wenn eine bei Dvina angemeldete Person eine Aufgabe anfordert, für die eine Website nötig ist – etwa Angebote zu vergleichen oder ein von ihr gewünschtes Formular auszufüllen –, kann Dvina das in einem eigenen Browser auf dem Dvina-Computer dieser Person erledigen. Es handelt sich um einen Desktop-Chromium mit Fenster, nicht um einen Headless-Browser. Die Person kann live zuschauen und jederzeit die Steuerung übernehmen.

  • Er handelt für eine einzelne Person. Jeder Browser gehört zu einem angemeldeten Dvina-Nutzer und arbeitet an dessen Auftrag.
  • Er ist kein Crawler. Es gibt keine Liste von Websites, die er selbstständig besucht. Er öffnet die Seiten, die eine Aufgabe erfordert, Schritt für Schritt: Er lädt eine Seite, liest sie und handelt dann darauf – so, wie es ein Mensch tut.
  • Niemals für das Training von Modellen verwendet. Was der Browser von Dvina auf deiner Website liest, wird ausschließlich für die Anfrage der Person verwendet, für die er arbeitet. Es wird niemals zum Training eines KI-Modells verwendet.
  • Er überlässt der Person ihre eigenen Entscheidungen. Er gibt keine Passwörter oder Kartendaten ein. Wenn eine Seite eine Anmeldung oder Zahlung durch die Person erfordert, hält Dvina an und bittet sie, die Steuerung zu übernehmen. Persönliche Angaben, Senden, Bezahlen und Löschen warten auf die Zustimmung der Person.
  • Er löst keine Prüfungen auf menschliche Nutzer. Wenn er auf eine Prüfung trifft, die feststellen soll, ob ein Mensch den Browser verwendet – etwa die Prüfung von Cloudflare, Turnstile, reCAPTCHA oder hCaptcha –, klickt er sie nicht an, löst sie nicht und lädt sie nicht neu. Wenn eine Prüfung von selbst verschwindet, wartet Dvina darauf. Wenn sie bestehen bleibt, wird die Arbeit unterbrochen. Die Person übernimmt den Browser, besteht die Prüfung und gibt die Steuerung zurück.

Seine Anfragen erkennen

Der Browser von Dvina signiert jede http- und https-Anfrage, die er sendet, mit Web Bot Auth: HTTP-Nachrichtensignaturen (RFC 9421) mit einem Ed25519-Schlüssel. Jede Anfrage enthält drei Header:

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 gibt Dvina als Origin an, unter der die Schlüssel veröffentlicht werden.
  • Signature-Input deckt die @authority der Anfrage (deinen Host) und den Header Signature-Agent ab. Der tag ist web-bot-auth.
  • Jede Signatur ist 60 Sekunden lang gültig, von created bis expires.
  • keyid ist der JWK-Thumbprint des Schlüssels (RFC 7638).

Der Browser sendet den eigenen User-Agent von Chromium, genau wie jeder Chromium unter Linux, zum Beispiel:

Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/155.0.0.0 Safari/537.36

Seine Chrome-Version ändert sich mit den Updates von Chromium, und der User-Agent gibt keinen Hinweis auf Dvina. Erkenne Dvina anhand der Signatur, nicht anhand des User-Agents.

Hinweis

Mit der Desktop-App kann eine Person Dvina auch einen Browser auf ihrem eigenen Computer verwenden lassen. Dieser Browser signiert seine Anfragen nicht und ist vom eigenen Surfen der Person nicht zu unterscheiden.

Eine Signatur verifizieren

Dvina veröffentlicht seinen öffentlichen Schlüssel in seinem Schlüsselverzeichnis:

https://api.dvina.ai/.well-known/http-message-signatures-directory

Das Verzeichnis antwortet mit Content-Type: application/http-message-signatures-directory+json und einem JSON Web Key Set mit dem öffentlichen Ed25519-Schlüssel von Dvina. Die Antwort ist mit demselben Schlüssel signiert, mit tag="http-message-signatures-directory".

Wenn deine Website Cloudflare nutzt, verifiziert Cloudflare signierte Agenten für dich. So verifizierst du eine Anfrage selbst:

  1. Prüfe, ob Signature-Agent den Wert "https://api.dvina.ai" hat und Signature-Input den Eintrag tag="web-bot-auth" enthält.
  2. Prüfe, ob die aktuelle Zeit zwischen created und expires liegt.
  3. Rufe das Schlüsselverzeichnis ab und wähle den Schlüssel, dessen JWK-Thumbprint mit keyid übereinstimmt.
  4. Erstelle die Signaturbasis aus @authority, signature-agent und den Signaturparametern, wie in RFC 9421 beschrieben, und verifiziere die Signature mit diesem Ed25519-Schlüssel.

Jeder kann diese Header senden. Behandle eine Anfrage nur dann als Anfrage von Dvina, wenn sich ihre Signatur anhand des Schlüsselverzeichnisses von Dvina verifizieren lässt.

Zulassen oder blockieren

Der Browser von Dvina handelt in Echtzeit für eine einzelne Person. Diese Art von Datenverkehr fällt unter Cloudflares Voreinstellung Agent. Wenn deine Website Cloudflare nutzt:

  • Richtlinien für KI-Bots: Wähle unter Sicherheitseinstellungen die Option Richtlinien für KI-Bots konfigurieren. Wähle für Agent entweder Zulassen (nicht blockieren), Auf Seiten mit Werbung blockieren oder Blockieren (auf allen Seiten).
  • Benutzerdefinierte WAF-Regeln: Bei Anfragen von verifizierten Bots und signierten Agenten ist cf.client.bot (bei Bot Management: cf.bot_management.verified_bot) auf true gesetzt. Verwende dieses Feld in einer benutzerdefinierten Regel, um sie von Prüfungen auszunehmen, einer Challenge zu unterziehen oder zu blockieren.
  • Verzeichnis verifizierter Bots: Die von Cloudflare verifizierten Agenten findest du in Cloudflare Radar.

Anywhere else, verify the signature as described above, then allow or block requests whose verified Signature-Agent is "https://api.dvina.ai".

Kontakt

Hast du Fragen zum Browser von Dvina auf deiner Website oder zu einer Anfrage, die sich anders verhalten hat als auf dieser Seite beschrieben? Schreib an support@dvina.ai und gib die Adresse deiner Website sowie, falls vorhanden, den Zeitpunkt und die keyid der Anfragen an.