So lösen Sie reCAPTCHA v3 Enterprise in C# (.NET SDK)

recaptcha v3 enterprise in c# - How to Solve reCAPTCHA v3 Enterprise in C# (.NET SDK)

Das Lösen von reCAPTCHA v3 Enterprise in C# verwendet dieselbe Methode wie jeder andere reCAPTCHA-Typ. Es gibt kein RecaptchaEnterpriseAsync. Sie rufen RecaptchaAsync und übergeben Sie zwei Flags: version gesetzt auf v3, und enterprise gesetzt auf 1. Verpassen Sie eines von beiden, erhalten Sie einen Token für ein anderes Produkt, den die Website ablehnt.

Hier ist der vollständige Aufruf, was die action Option tatsächlich bewirkt und wie Sie erkennen, welche Variante Sie vor sich haben.

Version und Enterprise sind unabhängige Flags

Das bringt fast jeden beim ersten Mal ins Straucheln. Enterprise ist keine vierte Version von reCAPTCHA. Es ist eine andere Google-Produktstufe, die sowohl v2 als auch v3 ausführt, sodass die beiden Einstellungen eine echte 2×2-Matrix bilden.

Was die Website ausführtOptionen, die Sie übergeben
reCAPTCHA v2 checkboxkeine
reCAPTCHA v2 Enterpriseenterprise = 1
reCAPTCHA v3version = "v3"
reCAPTCHA v3 Enterpriseversion = "v3" und enterprise = 1

Übergeben enterprise = 1 allein verschafft Ihnen eine v2-Enterprise-Lösung, und es wird auf einer v3-Seite fehlschlagen. Das ist die mit Abstand häufigste Ursache für einen Token, der einwandfrei zurückkommt und dann abgelehnt wird.

So erkennen Sie, ob eine Seite Enterprise ist

Öffnen Sie den Seitenquelltext und schauen Sie, welches Objekt das Skript aufruft. Standard-reCAPTCHA verwendet grecaptcha. Enterprise verwendet grecaptcha.enterprise.

// Enterprise pages call grecaptcha.enterprise, not grecaptcha.
// The action name you need is right here in execute().
grecaptcha.enterprise.ready(function () {
  grecaptcha.enterprise.execute("YOUR_SITEKEY", { action: "login" })
    .then(function (token) {
      // token gets posted with the form
    });
});

Zwei weitere Anzeichen: Das Script-Tag lädt /recaptcha/enterprise.js statt /recaptcha/api.js, und Enterprise-sitekeys beginnen normalerweise mit 6L genau wie Standardschlüssel, sodass der Schlüssel selbst nichts verrät. Vertrauen Sie dem Skript, nicht dem Schlüssel.

Einrichtung

CapSkip läuft auf Ihrem eigenen Rechner, starten Sie also die App, bevor irgendetwas davon funktioniert, und installieren Sie dann das SDK von NuGet:

# .NET Standard 2.0, so .NET Framework 4.6.1+, Core 2.0+
# and every modern .NET release are all supported.
dotnet add package CapSkip

Richten Sie den Client auf den in der App angezeigten Port:

using CapSkip;

var solver = new CapSkipClient(
    apiKey: "capskip",        // any string when key validation is off
    host: "127.0.0.1",
    port: 8080,
    recaptchaTimeout: 300);   // seconds; v3 rarely gets near this

Der v3-Enterprise-Aufruf

Alles über den Sitekey und die URL hinaus kommt in ein Options-Dictionary:

using System.Collections.Generic;
using CapSkip;

var result = await solver.RecaptchaAsync(
    "YOUR_SITEKEY",
    "https://example.com/page-with-recaptcha",
    new Dictionary<string, object?>
    {
        ["version"]    = "v3",
        ["enterprise"] = 1,
        ["action"]     = "login",   // match the page exactly
    });

Console.WriteLine(result.Code);   // g-recaptcha-response token

Die Signatur lautet RecaptchaAsync(string sitekey, string url, Dictionary<string, object?>? options = null). Das Dictionary hat nullbare Werte, also object? ist wichtig, wenn in Ihrem Projekt Nullable-Referenztypen aktiviert sind.

Was die action-Option tatsächlich bewirkt

action ist ausschließlich für v3. Auf einer v2-Seite bewirkt es nichts.

Es’ist das Label, das die Seite übergibt an grecaptcha.enterprise.execute(). Google bewertet jede Aktion separat, und das Backend der Website prüft normalerweise, ob die Aktion in der Verifizierungsantwort dem entspricht, was es erwartet hat. Wenn die Seite sagt login und Sie mit dem Standardwert lösen, ist Ihr Token gültig und wird trotzdem verworfen. Kopieren Sie die Zeichenfolge wortwörtlich, einschließlich Groß- und Kleinschreibung. Google beschränkt Actions auf alphanumerische Zeichen, Schrägstriche und Unterstriche, es gibt also nichts Exotisches zu maskieren.

Es falsch zu machen, ist geräuschlos. Nichts wirft einen Fehler, weil auf der Löser-Seite nichts schiefgegangen ist. Sie erhalten einfach einen Token, den der Endpunkt verweigert.

Es gibt keine Option für einen Mindest-Score

Klar gesagt, weil einige Lösungs-APIs damit werben: Sie fordern von CapSkip keinen Token mit einem bestimmten Score an. Der Score ist Googles Urteil, das entsteht, wenn Ihre Zielseite den Token verifiziert, und kein Parameter der Löse-Anfrage legt dafür einen Mindestwert fest. Wenn Sie einen min_score Feld an anderer Stelle und hier nach dem Äquivalent gesucht haben, deshalb können Sie es hier nicht finden.

Den Token übermitteln

Das Token kommt in das Feld, das die Seite postet, was normalerweise g-recaptcha-response:

using System.Net.Http;

using var http = new HttpClient();

var form = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>(
        "g-recaptcha-response", result.Code),
    new KeyValuePair<string, string>("username", "demo"),
});

var response = await http.PostAsync(
    "https://example.com/login", form);

Eine Sache, die Sie hier nicht brauchen: result.UserAgent. Es wird nur für Turnstile befüllt und ist bei jeder reCAPTCHA-Lösung null. Wenn Sie einen Helfer aus Turnstile-Code kopiert haben, entfernen Sie diesen Header, anstatt ein null zu senden.

reCAPTCHA-Tokens sind ebenfalls kurzlebig. Google lässt sie nach zwei Minuten verfallen, lösen Sie also in dem Moment, in dem Sie zum Absenden bereit sind, nicht am Anfang eines langen Workflows.

Was ist mit v2 Enterprise?

Gleiche Methode, andere Optionen. Ergänzen Sie version und action, und fügen Sie hinzu datas wenn Google der Seite ein data-s -Wert:

var v2 = await solver.RecaptchaAsync(sitekey, pageUrl,
    new Dictionary<string, object?>
    {
        ["enterprise"] = 1,
        ["datas"]      = "YOUR_DATA_S_VALUE",
    });

data-s taucht auf Googles eigenen Properties auf und fast nirgendwo sonst. Wenn Sie keinen auf der Seite finden, brauchen Sie ihn nicht.

Umgang mit Fehlern

Jede SDK-Ausnahme leitet sich ab von CapSkipError. Es gibt eine .NET-Falle, die man kennen sollte, bevor man die Catch-Blöcke schreibt.

using System;
using CapSkip;

try
{
    var result = await solver.RecaptchaAsync(sitekey, pageUrl, options);
}
catch (CapSkip.ValidationException) { /* bad parameters */ }
catch (NetworkException)            { /* CapSkip is not running */ }
catch (ApiException)                { /* API returned an error */ }
catch (CapSkip.TimeoutException)    { /* exceeded recaptchaTimeout */ }
catch (CapSkipError)                { /* anything else from the SDK */ }

TimeoutException und ValidationException existieren in beiden System und CapSkip. Wenn beide Namespaces importiert sind, löst sich ein unqualifiziertes catch zum System -Typ und wird stillschweigend nie ausgelöst. Qualifizieren Sie sie oder fangen Sie sie ab CapSkipError und untersuchen Sie es.

Häufige Fehler

CodeUrsacheBeheben
ERROR_GOOGLEKEYSitekey ist leer oder fehlerhaftLesen Sie es erneut von der Live-Seite, nicht aus einer zwischengespeicherten Kopie
ERROR_PAGEURLURL fehlt oder ist keine vollständige absolute URLGeben Sie das Schema an und verwenden Sie die Seite, auf der sich das Widget befindet
ERROR_BAD_PARAMETERSEin Optionswert hat den falschen TypPrüfen enterprise ist die Zahl 1, nicht der String “1”
ERROR_CAPTCHA_UNSOLVABLEDas Lösen konnte nicht abgeschlossen werdenBestätigen Sie, dass die Versions-Flags zur Seite passen, und fügen Sie dann einen Proxy auf demselben Netzwerkpfad hinzu

Die vollständige Parameterliste für jeden Typ finden Sie in der API-Dokumentation.

Häufig gestellte Fragen

Gibt es eine separate Methode für Enterprise?

Nein. RecaptchaAsync verarbeitet alle vier Kombinationen. Enterprise ist ein Flag im Options-Dictionary, und es funktioniert zusammen mit version anstatt es zu ersetzen.

Was passiert, wenn ich den Action-Namen falsch angebe?

Sie erhalten einen völlig gültigen Token, den die Website dennoch ablehnt. Google gibt die action zusammen mit dem Score während der Verifizierung zurück, und die meisten Backends vergleichen sie mit dem erwarteten Wert. Vom Löser kommt kein Fehler, weil auf der Löser-Seite nichts schiefgelaufen ist.

Brauche ich einen Proxy für v3 Enterprise?

Nur wenn die Website geosensitiv ist oder der Score von der anfragenden IP abhängt. Übergeben Sie ["proxy"] = new Proxy("HTTPS", "user:[email protected]:3128") im selben Options-Dictionary. Proxys werden für reCAPTCHA, Turnstile und GeeTest unterstützt, jedoch nicht für Bild-Captchas.

Kann ich mehrere Seiten gleichzeitig lösen?

Ja. Jede Methode gibt einen zurück Task, also await Task.WhenAll(...) ist alles, was Sie brauchen. Das SDK exportiert AsyncCapSkip auch, aber in .NET ist es nur ein Alias von CapSkipClient, beibehalten, damit aus dem Python-SDK portierter Code weiterhin kompiliert. Es bringt nichts.

Zusammenfassung

Eine Methode, zwei Flags. Setzen Sie version zu v3 und enterprise zu 1, kopieren Sie den action genau von der Seite ab, dann absenden result.Code innerhalb von zwei Minuten. Es gibt keinen Score zum Feinjustieren, wenn also ein Token abgelehnt wird, prüfen Sie zuerst die Action und die Flags.

Der Rest der .NET-Oberfläche befindet sich auf der C#-Captcha-Löser Seite, Enterprise-Support deckt die anderen Sprachen ab, und reCAPTCHA v3-Lösen geht tiefer auf das Scoring ein. CapSkip ist ein lokaler Captcha-Löser, sodass jede einzelne dieser Lösungen auf Ihrem eigenen Rechner erfolgt.