ALTCHA
und CapMonster Cloud

Captcha-Lösung, Installation auf der Website und Tests.

Preise für ALTCHA-Lösung

CAPTCHA
Preis (USD)
$ 0.80
1000 Token
Sie haben eine Website mit eingebauter Captcha- oder Bot-Schutzlösung übernommen, aber keinen Zugriff auf den Quellcode? Dann stellt sich schnell die Frage: Welche Lösung ist installiert, ist sie korrekt konfiguriert und wie lässt sie sich testen?

In diesem Artikel haben wir versucht, alle wichtigen Fragen zu beantworten. Der erste Schritt bei der Lösung der Aufgabe besteht darin festzustellen, welches Schutzsystem eingesetzt wird. Dazu können Sie die Liste beliebter Captchas und Anti-Bot-Schutzsysteme heranziehen, in der visuelle Beispiele und zentrale Merkmale aufgeführt sind, die Ihnen helfen, schnell zu erkennen, womit Sie es zu tun haben.

Wenn Sie feststellen, dass auf Ihrer Website ALTCHA eingesetzt wird, besteht der nächste Schritt darin, seine Eigenschaften und Funktionsweise genauer zu untersuchen. Ebenfalls in diesem Artikel finden Sie eine Anleitung zur Integration von ALTCHA, damit Sie vollständig verstehen, wie das System auf Ihrer Website arbeitet. So können Sie nicht nur den aktuellen Schutz besser einschätzen, sondern auch seine Wartung vorausschauend planen.

Was ist ALTCHA
Was ist ALTCHA
ALTCHA (Alternative CAPTCHA) ist ein System zum Schutz einer Website vor Bots und Spam. Es hilft dabei, echte Benutzer von automatisierten Programmen zu unterscheiden, damit die Website sicher und stabil funktioniert. ALTCHA ist eine moderne Alternative zu herkömmlichen Captchas: Es verwendet eine leichte kryptografische Aufgabe (Proof-of-Work) und sammelt dabei keine Cookies und verfolgt keine Benutzer.
Background
Beispiele von ALTCHA
Proof-of-Work (PoW)
Proof-of-Work (PoW)
Das System verwendet standardmäßig die Proof-of-Work-(PoW)-Verifikation, wodurch visuelle Rätsel und aufdringliche Prüfungen ausgeschlossen werden. Dieser Ansatz kombiniert Sicherheit und Benutzerfreundlichkeit und bietet eine unaufdringliche Captcha-Lösung, die für die meisten Besucher geeignet ist.
Code Captcha
Code Captcha
Der Schutz kann bis zur Durchführung eines Text-Captchas verstärkt werden.
Invisible Captcha
Invisible Captcha
Die Überprüfung erfolgt ohne sichtbares Widget und erfordert keinerlei Benutzeraktionen.

Wie man ALTCHA über CapMonster Cloud löst

Beim Testen von Formularen mit ALTCHA müssen Sie häufig prüfen, ob die Captcha korrekt eingebunden ist und funktioniert.

Sie können die auf Ihrer Seite eingebettete Captcha manuell testen.

  • Öffnen Sie die Formularseite und stellen Sie sicher, dass die Captcha angezeigt wird.
  • Versuchen Sie, das Formular ohne Lösung abzuschicken – der Server sollte einen Fehler melden.
  • Nach einer erfolgreichen Lösung muss das Formular ohne Probleme übermittelt werden.

Für automatisches Lösen können Sie Tools wie CapMonster Cloud einsetzen. Der Dienst nimmt die Captcha-Parameter entgegen, verarbeitet sie auf seinen Servern und liefert einen einsatzbereiten Token zurück. Diesen Token setzen Sie ins Formular ein, um die Prüfung ohne Benutzerinteraktion zu bestehen.

Die Arbeit mit CapMonster Cloud über die API umfasst in der Regel folgende Schritte:

Aufgabe erstellenAufgabe erstellen
arrow
API-Anfrage sendenAPI-Anfrage senden
arrow
Ergebnis empfangenErgebnis empfangen
arrow
Token auf der Seite einsetzenToken auf der Seite einsetzen
arrow
Lösung, Token-Einsetzung und Formularübermittlung
Beispiel in Node.js für den vollständigen Ablauf der Captcha-Lösung auf Ihrer Webseite. Mögliche Ansätze: HTTP-Anfragen senden, um HTML und Captcha-Parameter abzurufen, die Antwort zu senden und das Ergebnis zu verarbeiten; oder mit Automatisierungstools wie Playwright — die Seite öffnen, auf das Captcha warten, Parameter übermitteln (zum Testen können Sie sowohl korrekte als auch falsche Daten senden), das Ergebnis über den CapMonster-Cloud-Client abrufen, das Token in das Formular einfügen und das Resultat sehen.
// npm install playwright
// npx playwright install chromium

const { chromium } = require("playwright");

const API_KEY = "YOUR_API_KEY";
const ALTCHA_PAGE = "https://example.com"; // Ihre Website mit ALTCHA

(async () => {
  const browser = await chromium.launch({ headless: false, devtools: true });
  const context = await browser.newContext();
  const page = await context.newPage();

  // Wir fangen alle Antworten des Altcha-Endpunkts ab
  let challengeResp = null;
  page.on("response", async (response) => {
    try {
      const url = response.url();
      if (url.startsWith("https://captcha.example.com/altcha")) { // Altcha-Endpunkt
        challengeResp = await response.json();
        console.log("Captured Altcha response:", challengeResp);
      }
    } catch (err) {
      console.warn("Error parsing Altcha response:", err);
    }
  });

  await page.goto(ALTCHA_PAGE, { waitUntil: "networkidle" });

  // Klick auf das Widget, falls vorhanden
  const widgetHandle = await page.$("altcha-widget");
  if (widgetHandle) {
    try {
      await widgetHandle.click();
    } catch {}
  }

  // Warten auf das Erscheinen des challenge
  const start = Date.now();
  while (!challengeResp && Date.now() - start < 60000) { // Timeout erhöht
    await new Promise((r) => setTimeout(r, 300));
  }

  if (!challengeResp) {
    console.error("Failed to capture Altcha challenge.");
    await browser.close();
    return;
  }

  const { challenge, salt, signature, maxnumbers } = challengeResp;

  // Aufgabe bei CapMonster Cloud erstellen
  const createTaskBody = {
    clientKey: API_KEY,
    task: {
      type: "CustomTask",
      class: "altcha",
      websiteURL: ALTCHA_PAGE,
      websiteKey: "",
      userAgent:"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/149.0.0.0 Safari/537.36",
      metadata: {
        challenge,
        iterations: maxnumbers || 100000,
        salt,
        signature,
      },
    },
  };

  const taskResp = await fetch("https://api.capmonster.cloud/createTask", {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify(createTaskBody),
  }).then((r) => r.json());

  console.log("CreateTask response:", taskResp);
  if (!taskResp?.taskId) {
    console.error("CreateTask failed:", taskResp);
    await browser.close();
    return;
  }

  const taskId = taskResp.taskId;

  // Lösung abrufen
  let fullSolution = null;
  const pollStart = Date.now();
  while (Date.now() - pollStart < 120000) {
    const res = await fetch("https://api.capmonster.cloud/getTaskResult", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ clientKey: API_KEY, taskId }),
    }).then((r) => r.json());

    if (res.status === "ready") {
      fullSolution = res.solution;
      console.log("Solution:", fullSolution);
      break;
    }
    await new Promise((r) => setTimeout(r, 3000));
  }

  if (!fullSolution) {
    console.error("No solution received in time.");
    await browser.close();
    return;
  }

  const token = fullSolution?.data?.token || fullSolution?.token || fullSolution?.data;

  if (!token) {
    console.error("Token not found in solution:", fullSolution);
    await browser.close();
    return;
  }

  //Token einfügen
  await page.evaluate((t) => {
    let input = document.querySelector("#captchaParaValidar");
    if (!input) {
      input = document.createElement("input");
      input.type = "hidden";
      input.id = "captchaParaValidar";
      input.name = "captchaParaValidar";
      (document.querySelector("form") || document.body).appendChild(input);
    }
    input.value = t;

    let alt = document.querySelector('input[name="altcha"]');
    if (!alt) {
      alt = document.createElement("input");
      alt.type = "hidden";
      alt.name = "altcha";
      (document.querySelector("form") || document.body).appendChild(alt);
    }
    alt.value = t;

    const widget = document.querySelector("altcha-widget");
    if (widget) {
      widget.setAttribute("data-state", "verified");
      const checkbox = widget.querySelector("input[type='checkbox']");
      if (checkbox) {
        checkbox.checked = true;
        checkbox.dispatchEvent(new Event("change", { bubbles: true }));
      }
      const label = widget.querySelector(".altcha-label");
      if (label) label.textContent = "Verified";
    }
  }, token);

  console.log("Token injected:", token);
})();
Wie man ALTCHA auf seiner Website einbindet
Um sich sicher in der Funktionsweise des Captchas auf Ihrer Website zurechtzufinden, dessen Prüfungslogik zu verstehen, es neu zu konfigurieren oder erneut zu integrieren, empfehlen wir Ihnen, diesen Abschnitt zu lesen. Hier wird der gesamte Einbindungsprozess beschrieben — das hilft Ihnen, alle Feinheiten schnell zu verstehen.

1. Widget-Installation

Variante 1 — über CDN (am einfachsten). Fügen Sie im <head> Ihres HTML Folgendes hinzu:

<script async defer src="https://cdn.jsdelivr.net/gh/altcha-org/altcha/dist/altcha.min.js" type="module"></script>

Variante 2 — über npm:

npm install altcha

Importieren Sie das Widget in Ihre JS-Datei:

import "altcha";

2. Hinzufügen des Widgets zum Formular.

Fügen Sie die Komponente <altcha-widget> in das Formular ein, das geschützt werden soll:


<form method="POST" action="/submit">
  <altcha-widget challengeurl="/altcha/challenge"></altcha-widget>
  <button type="submit">Send</button>
</form>

challengeurl — Ihr serverseitiger Endpoint zur Ausgabe der Challenge.

Wenn Sie ALTCHA Sentinel verwenden (eine fertige Serversicherheitslösung gegen Bots und Spam, inkl. Machine-Learning und Traffic-Analyse), verwenden Sie statt Ihres eigenen Servers dessen URL:


<altcha-widget 
  challengeurl="https://sentinel.example.com/v1/challenge?apiKey=YOUR_API_KEY">
</altcha-widget>

3. Serverseitige Überprüfung.

Wie die Überprüfung abläuft:

  • 1) Das Widget generiert ein Payload — Base64-codiertes JSON, das normalerweise als Formularfeld altcha gesendet wird.
  • 2) Auf dem Server prüfen Sie das Payload kryptografisch (ohne zusätzliche API-Anfragen).
  • 3) Nach erfolgreicher Prüfung kann das Formular verarbeitet werden.

Überprüfung über ALTCHA Sentinel:

Mit der BibliothekMit der Bibliothek
arrow

Über das HTTP-API von Sentinel (falls Bibliothek nicht verfügbar ist):Über das HTTP-API von Sentinel (falls Bibliothek nicht verfügbar ist):
arrow

4. Überprüfung ohne Sentinel (eigener Server)

Generierung der Challenge:


import { createChallenge } from 'altcha-lib';

const hmacKey = '$ecret.key'; // Ihr geheimer HMAC-Schlüssel

const challenge = await createChallenge({ hmacKey });

// Wir geben die Challenge im JSON für das Widget zurück

Payload-Prüfung beim Absenden des Formulars:


import { verifySolution } from 'altcha-lib';

const hmacKey = '$ecret.key'; // Ihr geheimer HMAC-Schlüssel

const verified = await verifySolution(payload, hmacKey);

if (verified) {
  // Überprüfung erfolgreich — Formulardaten können verarbeitet werden
}

In diesem Fall erstellen Sie selbst den Endpoint /altcha/challenge für die Ausgabe von Aufgaben und führen die Prüfung serverseitig durch.

Background
Mögliche Fehler und Debugging
Bug Icon
Ungültige challengeurl oder API Key
Das Widget lädt nicht oder liefert beim Prüfen einen Fehler zurück.
Bug Icon
Lösungs-Timeout
Der Server hatte keine Zeit, den Payload zu überprüfen. Erhöhen Sie das Timeout oder stellen Sie sicher, dass die serverseitige Überprüfung korrekt funktioniert.
Bug Icon
Leerer Payload
Fehler bei der Übertragung des Ergebnisses vom Widget an den Server.
Bug Icon
Verification failed
Payload ist abgelaufen, erneut verwendet oder manipuliert. Aktivieren Sie das Logging und prüfen Sie die Felder verified und verificationData in der Antwort des Servers oder Sentinel.
Tests der Schutzstabilität
Stellen Sie nach der Integration sicher, dass das System die Website wirklich vor automatisierten Aktionen schützt.
Tipps zu Sicherheit und Optimierung
<span class="font-bold">Speichern Sie geheime Schlüssel</span> (HMAC oder API Key für Sentinel) nur auf dem Server — senden Sie sie nicht an das Frontend.
<span class="font-bold">Protokollieren Sie Fehler</span> und Verifizierungsereignisse (<span class="font-bold">verified: false</span> und <span class="font-bold">verificationData</span>), um die Gründe für fehlgeschlagene Prüfungen zu verstehen.
Für Transparenz und Nutzervertrauen <span class="font-bold">fügen Sie Links zur Datenschutzrichtlinie</span> und zu den <span class="font-bold">ALTCHA Nutzungsbedingungen</span> hinzu, falls erforderlich.
Fazit

Wenn Sie eine Website übernommen haben, auf der bereits ein Captcha oder ein anderes Schutzsystem installiert ist und Sie keinen Zugriff auf den Code haben, ist das kein Problem! Es ist ziemlich einfach festzustellen, welche Technologie genau verwendet wird. Und um die korrekte Funktionsweise zu überprüfen, können Sie den Erkennungsdienst CapMonster Cloud in einer isolierten Testumgebung nutzen, um sicherzustellen, dass der Mechanismus zur Tokenverarbeitung und die Prüflogik ordnungsgemäß funktionieren.

Im Fall von ALTCHA reicht es aus, das System zu erkennen, sein Verhalten zu analysieren und sich zu vergewissern, dass der Schutz korrekt arbeitet. In diesem Artikel haben wir gezeigt, wie Sie ALTCHA identifizieren und wo Sie Anleitungen für die Einbindung oder Neukonfiguration finden, damit Sie den Schutz zuverlässig betreiben und seine Arbeit unter Kontrolle halten können.

Conclusion
Nützliche Links
DocIconALTCHA-DokumentationDocIconALTCHA-QuellcodeDocIconCapMonster-Cloud-Dokumentation (Arbeit mit ALTCHA)

Häufig gestellte Fragen zu ALTCHA

ALTCHA-Widgets können ohne traditionelle Sitekeys arbeiten, weshalb CapMonster Cloud eine leere Zeichenkette ("") für den Parameter websiteKey akzeptiert.

Wichtig: Dieses Feld ist in Ihrer JSON-Nutzlast weiterhin Pflicht. Auch wenn die Website ALTCHA Sentinel nutzt und einen apiKey in der challengeurl ausliefert, extrahieren Sie ihn nicht — senden Sie einfach "websiteKey": "".

Der Parameter iterations in Ihrer CapMonster-Cloud-Aufgabe entspricht direkt dem Wert maxnumber (maximale Zahl für Berechnungen) im Challenge-Objekt, das der ALTCHA-Endpoint auf Ihrer Zielseite zurückgibt. Übergeben Sie genau diesen Wert, um stille Lösungsfehler zu vermeiden.

Die getTaskResult-Antwort liefert sowohl die einfache number als auch das vollständige Base64-codierte token gleichzeitig in derselben Nutzlast. Der Entwickler extrahiert einfach den Wert, den die Zielwebsite zur Validierung verlangt.

Während einige Formulare nur die berechnete Zahl zur Bestätigung benötigen, erwarten andere den vollständigen Parametersatz sicher in Base64 verschlüsselt.

CapMonster Cloud unterstützt alle drei ALTCHA-Varianten:

  • Proof-of-Work — das Standard-ALTCHA-Widget mit rechnerischem Challenge im Browser.
  • Code Captcha — erfordert die Eingabe eines kurzen Codes durch Nutzer oder Skript.
  • Invisible Captcha — läuft im Hintergrund ohne sichtbares Widget oder Nutzerinteraktion.

Erfahren Sie, wie Sie alle erforderlichen Parameter für die Aufgabenerstellung finden

Nachdem der Client die Challenge übermittelt hat, prüft Ihr Backend die Daten (salt, signature, berechnete Zahl und difficulty). Sie können dies auf zwei Arten umsetzen:

  • Sentinel API: Validiert die Nutzlast automatisch und verhindert Replay-Angriffe (Deduplizierung und Ablauf).
  • Eigener Server: Verwenden Sie die Funktion verifySolution, um den Boolean verified und die Nutzlast manuell zu prüfen.

Details finden Sie im Kapitel Wie man ALTCHA auf seiner Website einbindet (Schritte 3–4) oben.

Hinweis: Schlägt die Validierung fehl (z. B. 403 Forbidden), liegt dies meist an einer abgelaufenen oder wiederverwendeten Nutzlast (Replay-Angriff), nicht an einer falschen PoW-Berechnung.