← ZurĂŒck zum Blog

Wie man die Erkennung von Automatisierung durch Timing-Angriffe vermeidet: Schutz in Selenium und Puppeteer

Timing-Angriffe sind eine der komplexesten Methoden zur Erkennung von Automatisierung. Wir erklĂ€ren, wie man sich vor der Analyse der AusfĂŒhrungszeit von Aktionen im Browser schĂŒtzt.

📅10. Januar 2026
```html

Timing-Angriffe sind eine Methode zur Erkennung von Bots, die auf der Analyse der AusfĂŒhrungszeiten von Aktionen im Browser basiert. Moderne Anti-Fraud-Systeme von Facebook, Google, TikTok und anderen Plattformen analysieren nicht nur, was Sie tun, sondern auch, wie schnell Sie es tun. Zu schnelle Klicks, sofortiges Laden von Seiten, das Fehlen natĂŒrlicher Pausen – all dies verrĂ€t die Automatisierung. In diesem Artikel werden wir technische Schutzmethoden gegen Timing-Angriffe fĂŒr Entwickler untersuchen, die mit Selenium, Puppeteer und Anti-Detect-Browsern arbeiten.

Was sind Timing-Angriffe und wie funktionieren sie

Ein Timing-Angriff ist eine Methode zur Erkennung von Automatisierung, die auf der Messung der Zeitintervalle zwischen den Aktionen eines Benutzers basiert. Anti-Fraud-Systeme sammeln Telemetrie: wie viel Zeit vom Laden der Seite bis zum ersten Klick vergangen ist, wie schnell der Benutzer scrollt, ob es Pausen beim AusfĂŒllen von Formularen gibt. Diese Daten werden mit Verhaltensmodellen von echten Menschen verglichen.

Die wichtigsten zeitlichen Metriken, die von Schutzsystemen analysiert werden:

  • Time to First Interaction (TTFI) – die Zeit vom Laden der Seite bis zur ersten Aktion (Klick, Scrollen, Texteingabe). Bots handeln normalerweise sofort nach dem Laden des DOM, Menschen – nach 0,5-3 Sekunden.
  • Klick-Zeitmuster – Intervalle zwischen Klicks. Automatisierte Skripte klicken oft mit gleicher Frequenz (z.B. genau alle 2 Sekunden), Menschen – chaotisch.
  • Konsistenz der Tippgeschwindigkeit – Geschwindigkeit der Texteingabe. Bots geben Text sofort oder mit konstanten Verzögerungen zwischen den Zeichen ein, Menschen – mit variabler Geschwindigkeit und Pausen.
  • Mausbewegungsgeschwindigkeit – Geschwindigkeit der Cursorbewegung. Selenium teleportiert den Cursor standardmĂ€ĂŸig sofort an den gewĂŒnschten Punkt, Menschen bewegen die Maus mit Beschleunigung und Verzögerung.
  • Scrollverhalten – Muster beim Scrollen der Seite. Bots scrollen oft genau um eine feste Anzahl von Pixeln, Menschen – unregelmĂ€ĂŸig, mit Stopps.

Die Erkennungssysteme verwenden maschinelles Lernen zur Analyse dieser Metriken. Sie erstellen ein Verhaltensprofil und berechnen die Wahrscheinlichkeit, dass der Benutzer ein Bot ist. Wenn die zeitlichen Muster zu perfekt oder zu schnell sind – ist das ein rotes Signal.

Wichtig: Timing-Angriffe sind besonders effektiv gegen Massenautomatisierung. Wenn Sie 100 Browser mit den gleichen zeitlichen Mustern ausfĂŒhren, wird das Anti-Fraud-System sie leicht aufgrund statistischer Anomalien erkennen.

Methoden zur Erkennung von Automatisierung durch zeitliche Muster

Moderne Anti-Fraud-Systeme verwenden mehrere Schichten der Analyse zeitlicher Merkmale. Lassen Sie uns spezifische Techniken betrachten, die Facebook, Google, Cloudflare und andere Plattformen anwenden.

1. Analyse der Performance API

Browser bieten die Performance API, die detaillierte Telemetrie zum Laden von Seiten sammelt. Anti-Fraud-Systeme analysieren:

// Beispiel fĂŒr Performance API-Daten
performance.timing = {
  navigationStart: 1234567890000,
  domLoading: 1234567890150,      // +150ms
  domInteractive: 1234567890300,  // +300ms
  domComplete: 1234567890500,     // +500ms
  loadEventEnd: 1234567890600     // +600ms
}

// VerdĂ€chtige Muster fĂŒr Bots:
// - Zu schnelles Laden (domComplete < 200ms)
// - Perfekt gleichmĂ€ĂŸige Intervalle zwischen Ereignissen
// - Keine Verzögerungen beim Laden externer Ressourcen

Headless-Browser (insbesondere Ă€ltere Versionen von Puppeteer und Selenium) zeigen oft anormal schnelle Werte fĂŒr navigationStart und domLoading, da sie Bilder, Schriftarten und andere Ressourcen nicht so laden wie ein normaler Browser.

2. Ereignis-Zeit-Analyse

JavaScript-Tracker verfolgen die Zeitstempel aller Ereignisse (Klicks, Mausbewegungen, Tasteneingaben) und analysieren Muster:

// Beispiel fĂŒr das Sammeln von Telemetrieereignissen
const events = [];

document.addEventListener('click', (e) => {
  events.push({
    type: 'click',
    timestamp: performance.now(),
    x: e.clientX,
    y: e.clientY
  });
});

// Analyse verdÀchtiger Muster:
// - Klicks erfolgen genau alle N Millisekunden
// - Keine Mikrobewegungen der Maus vor dem Klick
// - Der erste Klick erfolgt sofort nach dem Laden der Seite

3. Tastenanschlag-Dynamik

Beim AusfĂŒllen von Formularen analysieren Anti-Fraud-Systeme die Dynamik der TastenanschlĂ€ge – ein einzigartiger biometrischer Indikator jeder Person:

  • Dwell time – die Zeit, in der eine Taste gedrĂŒckt wird (von keydown bis keyup). Bei Menschen variiert sie zwischen 50 und 200 ms, bei Bots ist sie konstant.
  • Flight time – die Zeit zwischen dem Loslassen einer Taste und dem DrĂŒcken der nĂ€chsten. Bei Menschen betrĂ€gt sie zwischen 100 und 500 ms mit Variationen, bei Bots ist sie eine feste Verzögerung.
  • Tipp-Rhythmus – das allgemeine Tempo des Tippens. Menschen machen Pausen bei Satzzeichen, korrigieren Fehler, Bots nicht.

Beispiel fĂŒr die Erkennung: Wenn Sie element.send_keys("text") in Selenium verwenden, wird der gesamte Text in 1-2 Millisekunden eingegeben – das verrĂ€t sofort die Automatisierung.

Nachahmung menschlicher Verzögerungen im Code

Die erste Schutzebene gegen Timing-Angriffe besteht darin, Verzögerungen zwischen den Aktionen hinzuzufĂŒgen. Es ist jedoch wichtig, nicht einfach time.sleep(2) einzufĂŒgen, sondern ein natĂŒrliches Verhalten zu simulieren.

Grundlegende Nachahmung von Verzögerungen in Python (Selenium)

import time
import random
from selenium import webdriver
from selenium.webdriver.common.by import By

def human_delay(min_sec=0.5, max_sec=2.0):
    """ZufÀllige Verzögerung, die einen Menschen imitiert"""
    delay = random.uniform(min_sec, max_sec)
    time.sleep(delay)

driver = webdriver.Chrome()
driver.get("https://example.com")

# Verzögerung vor der ersten Aktion (der Mensch liest die Seite)
human_delay(1.5, 4.0)

# Klick auf das Element
button = driver.find_element(By.ID, "submit-btn")
button.click()

# Verzögerung vor der nÀchsten Aktion
human_delay(0.8, 2.5)

Fortgeschrittene Nachahmung mit normaler Verteilung

Eine gleichmĂ€ĂŸige Verteilung (uniform) sieht unnatĂŒrlich aus. Menschliche Verzögerungen folgen einer Normalverteilung mit Ausreißern:

import numpy as np

def realistic_delay(mean=1.5, std_dev=0.5, min_val=0.3, max_val=5.0):
    """
    Verzögerung mit normaler Verteilung
    mean: durchschnittliche Verzögerungszeit
    std_dev: Standardabweichung
    min_val, max_val: Grenzen (um extreme Werte zu vermeiden)
    """
    delay = np.random.normal(mean, std_dev)
    delay = max(min_val, min(max_val, delay))  # Begrenzen des Bereichs
    time.sleep(delay)
    return delay

# Verwendung
realistic_delay(mean=2.0, std_dev=0.7)  # Durchschnitt 2 Sek., aber mit Variationen

Kontextuelle Verzögerungen

Verschiedene Aktionen erfordern unterschiedliche Zeiten. Erstellen Sie Verzögerungsprofile fĂŒr verschiedene Szenarien:

class HumanBehavior:
    """Verzögerungsprofile fĂŒr verschiedene Arten von Aktionen"""
    
    @staticmethod
    def page_load_delay():
        """Verzögerung nach dem Laden der Seite (Inhalt lesen)"""
        return realistic_delay(mean=2.5, std_dev=1.0, min_val=1.0, max_val=6.0)
    
    @staticmethod
    def before_click():
        """Verzögerung vor dem Klick (Element mit den Augen suchen)"""
        return realistic_delay(mean=0.8, std_dev=0.3, min_val=0.3, max_val=2.0)
    
    @staticmethod
    def before_typing():
        """Verzögerung vor dem Beginn der Texteingabe"""
        return realistic_delay(mean=1.2, std_dev=0.5, min_val=0.5, max_val=3.0)
    
    @staticmethod
    def between_form_fields():
        """Verzögerung zwischen den Formularfeldern"""
        return realistic_delay(mean=0.6, std_dev=0.2, min_val=0.2, max_val=1.5)

# Verwendung im Skript
driver.get("https://example.com/login")
HumanBehavior.page_load_delay()

username_field = driver.find_element(By.ID, "username")
HumanBehavior.before_typing()
# ... Eingabe des Benutzernamens ...

HumanBehavior.between_form_fields()

password_field = driver.find_element(By.ID, "password")
HumanBehavior.before_typing()
# ... Eingabe des Passworts ...

Randomisierung der AusfĂŒhrungszeiten von Aktionen

Gleiche Verzögerungen zwischen den Aktionen sind eine statistische Anomalie. Wenn Sie 100 Instanzen des Skripts ausfĂŒhren und alle genau 2,5 Sekunden nach dem Laden auf die SchaltflĂ€che klicken – wird dies leicht erkannt. Eine Randomisierung auf mehreren Ebenen ist erforderlich.

1. Randomisierung der Reihenfolge der Aktionen

FĂŒgen Sie VariabilitĂ€t in die Reihenfolge der Aktionen ein. Zum Beispiel scrollen Sie manchmal die Seite, bevor Sie das Formular ausfĂŒllen, manchmal nicht:

def fill_form_naturally(driver):
    # 30% Wahrscheinlichkeit, die Seite vor dem AusfĂŒllen zu scrollen
    if random.random() < 0.3:
        driver.execute_script("window.scrollBy(0, 200)")
        human_delay(0.5, 1.5)
    
    # 20% Wahrscheinlichkeit, an eine zufÀllige Stelle zu klicken (Nachahmung des Lesens)
    if random.random() < 0.2:
        body = driver.find_element(By.TAG_NAME, "body")
        body.click()
        human_delay(0.3, 0.8)
    
    # Hauptaktion – AusfĂŒllen des Formulars
    username_field = driver.find_element(By.ID, "username")
    type_like_human(username_field, "myusername")

2. Variable Tippgeschwindigkeit

Anstelle einer sofortigen Texteingabe simulieren Sie die Eingabe Zeichen fĂŒr Zeichen mit variabler Geschwindigkeit:

def type_like_human(element, text):
    """Texteingabe mit Nachahmung der menschlichen Tippgeschwindigkeit"""
    for char in text:
        element.send_keys(char)
        
        # Grundverzögerung zwischen den Zeichen
        base_delay = random.uniform(0.05, 0.15)
        
        # ZusÀtzliche Pausen bei Leerzeichen und Satzzeichen
        if char in [' ', '.', ',', '!', '?']:
            base_delay += random.uniform(0.1, 0.3)
        
        # ZufĂ€llige "Nachdenklichkeit" (5% Wahrscheinlichkeit fĂŒr lange Pausen)
        if random.random() < 0.05:
            base_delay += random.uniform(0.5, 1.5)
        
        time.sleep(base_delay)
    
    # Manchmal machen wir einen Tippfehler und korrigieren ihn (10% Wahrscheinlichkeit)
    if random.random() < 0.1:
        time.sleep(random.uniform(0.2, 0.5))
        element.send_keys(Keys.BACKSPACE)
        time.sleep(random.uniform(0.1, 0.3))
        element.send_keys(text[-1])  # Letztes Zeichen erneut eingeben

3. Puppeteer: langsame Texteingabe

In Puppeteer gibt es eine eingebaute Option delay fĂŒr die Methode type(), aber sie muss randomisiert werden:

// Grundlegende Verwendung (NICHT empfohlen – feste Verzögerung)
await page.type('#username', 'myusername', { delay: 100 });

// Richtiger Ansatz – Randomisierung fĂŒr jedes Zeichen
async function typeWithVariableSpeed(page, selector, text) {
  await page.click(selector);
  
  for (const char of text) {
    await page.keyboard.type(char);
    
    // ZufÀllige Verzögerung von 50 bis 150 ms
    let delay = Math.random() * 100 + 50;
    
    // ZusÀtzliche Pause bei Leerzeichen
    if (char === ' ') {
      delay += Math.random() * 200 + 100;
    }
    
    // ZufÀllige lange Pausen (5% Wahrscheinlichkeit)
    if (Math.random() < 0.05) {
      delay += Math.random() * 1000 + 500;
    }
    
    await page.waitForTimeout(delay);
  }
}

// Verwendung
await typeWithVariableSpeed(page, '#username', 'myusername');

NatĂŒrliches Mausbewegung und Scrollgeschwindigkeit

Selenium und Puppeteer bewegen den Mauszeiger standardmĂ€ĂŸig nicht – sie teleportieren ihn sofort an den gewĂŒnschten Punkt und klicken. Dies ist eines der offensichtlichsten Anzeichen fĂŒr Automatisierung. Um menschliche Mausbewegungen zu simulieren, sind spezielle Bibliotheken erforderlich.

Bibliothek pyautogui fĂŒr sanfte Mausbewegungen

Die Bibliothek pyautogui ermöglicht es, den Cursor entlang einer Bézier-Kurve mit Beschleunigung und Verzögerung zu bewegen:

import pyautogui
from selenium.webdriver.common.action_chains import ActionChains

def move_mouse_naturally(driver, element):
    """Sanfte Bewegung der Maus zum Element mit Nachahmung eines Menschen"""
    # Holen Sie sich die Koordinaten des Elements
    location = element.location
    size = element.size
    
    # Zielpunkt (Mitte des Elements + kleine ZufÀlligkeit)
    target_x = location['x'] + size['width'] / 2 + random.randint(-5, 5)
    target_y = location['y'] + size['height'] / 2 + random.randint(-5, 5)
    
    # Sanfte Bewegung mit variabler Geschwindigkeit
    # duration – Bewegungszeit (0,5-1,5 Sek. fĂŒr Realismus)
    duration = random.uniform(0.5, 1.5)
    
    # tweening – Beschleunigungsfunktion (easeInOutQuad imitiert menschliche Bewegung)
    pyautogui.moveTo(target_x, target_y, duration=duration, tween=pyautogui.easeInOutQuad)
    
    # Kleine Pause vor dem Klick (der Mensch klickt nicht sofort)
    time.sleep(random.uniform(0.05, 0.15))
    
    # Klick
    element.click()

Wichtig: Diese Methode funktioniert nur, wenn Selenium ein echtes Browserfenster steuert (nicht headless). FĂŒr den Headless-Modus ist die Mausbewegung nutzlos, da Anti-Fraud-Systeme den Cursor nicht sehen.

Puppeteer: Nachahmung der Mausbewegung

In Puppeteer kann die Bibliothek ghost-cursor fĂŒr realistische Cursorbewegungen verwendet werden:

// Installation: npm install ghost-cursor
const { createCursor } = require("ghost-cursor");
const puppeteer = require("puppeteer");

(async () => {
  const browser = await puppeteer.launch({ headless: false });
  const page = await browser.newPage();
  const cursor = createCursor(page);
  
  await page.goto("https://example.com");
  
  // Sanfte Bewegung zum Element und Klick
  const button = await page.$("#submit-btn");
  await cursor.click(button);  // Der Cursor bewegt sich entlang einer Bézier-Kurve!
  
  // Alternativ – Bewegung zu Koordinaten
  await cursor.move("#username");  // Wir bewegen den Cursor einfach ohne Klick
  await page.waitForTimeout(300);
  await cursor.click();  // Wir klicken an der aktuellen Position
})();

Nachahmung des Scrollens

Menschen scrollen nicht die Seite genau um 500 Pixel auf einmal. Das Scrollen sollte unregelmĂ€ĂŸig sein, mit Pausen und manchmal RĂŒckscrollen:

def scroll_like_human(driver, target_position=None):
    """
    Nachahmung menschlichen Scrollens
    target_position: Zielposition in Pixeln (wenn None – scrollen wir bis zum Ende)
    """
    current_position = driver.execute_script("return window.pageYOffset;")
    
    if target_position is None:
        # Scrollen bis zum Ende der Seite
        target_position = driver.execute_script("return document.body.scrollHeight;")
    
    while current_position < target_position:
        # ZufÀlliger Scrollschritt (100-400 Pixel)
        scroll_step = random.randint(100, 400)
        current_position += scroll_step
        
        # Scrollen
        driver.execute_script(f"window.scrollTo(0, {current_position});")
        
        # Pause zwischen den Scrolls (der Mensch liest den Inhalt)
        time.sleep(random.uniform(0.3, 1.2))
        
        # Manchmal scrollen wir ein wenig zurĂŒck (10% Wahrscheinlichkeit)
        if random.random() < 0.1:
            back_scroll = random.randint(50, 150)
            current_position -= back_scroll
            driver.execute_script(f"window.scrollTo(0, {current_position});")
            time.sleep(random.uniform(0.2, 0.6))

# Verwendung
scroll_like_human(driver, target_position=2000)  # Scrollen bis 2000px

Ladezeiten von Seiten und AJAX-Anfragen

Anti-Fraud-Systeme analysieren nicht nur die Aktionen des Benutzers, sondern auch die Ladecharakteristika von Seiten. Headless-Browser laden oft anormal schnell, da sie Bilder nicht laden, einige Skripte nicht ausfĂŒhren und CSS nicht rendern.

Problem: Zu schnelles Laden

Vergleichen Sie die typischen Werte der Performance API fĂŒr einen normalen Browser und headless:

Metrik Normaler Browser Headless (verdÀchtig)
domContentLoaded 800-2000 ms 50-200 ms
loadEventEnd 2000-5000 ms 100-500 ms
Anzahl der geladenen Ressourcen 50-200 (Bilder, CSS, JS) 5-20 (nur kritische)

Lösung: KĂŒnstliche Ladeverzögerung

FĂŒgen Sie eine kĂŒnstliche Verzögerung nach dem Laden der Seite hinzu, damit die Metriken natĂŒrlicher aussehen:

def load_page_naturally(driver, url):
    """Laden der Seite mit Nachahmung einer natĂŒrlichen Ladezeit"""
    start_time = time.time()
    driver.get(url)
    
    # Warten auf das vollstÀndige Laden des DOM
    WebDriverWait(driver, 10).until(
        lambda d: d.execute_script("return document.readyState") == "complete"
    )
    
    # Berechnen der tatsÀchlichen Ladezeit
    actual_load_time = time.time() - start_time
    
    # Wenn das Laden zu schnell war (< 1 Sek.), fĂŒgen Sie eine Verzögerung hinzu
    if actual_load_time < 1.0:
        additional_delay = random.uniform(1.0, 2.5) - actual_load_time
        time.sleep(additional_delay)
    
    # ZusĂ€tzliche Verzögerung fĂŒr "Seitenlesen"
    time.sleep(random.uniform(0.5, 2.0))

# Verwendung
load_page_naturally(driver, "https://example.com")

Warten auf AJAX-Anfragen

Moderne Websites laden Inhalte asynchron ĂŒber AJAX. Wenn Ihr Skript beginnt zu handeln, bevor alle AJAX-Anfragen abgeschlossen sind – ist das verdĂ€chtig. Verwenden Sie explizite Wartezeiten:

from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC

def wait_for_ajax(driver, timeout=10):
    """Warten auf den Abschluss aller AJAX-Anfragen (jQuery)"""
    WebDriverWait(driver, timeout).until(
        lambda d: d.execute_script("return jQuery.active == 0")
    )

# FĂŒr Websites ohne jQuery – Warten auf ein bestimmtes Element
def wait_for_dynamic_content(driver, selector, timeout=10):
    """Warten auf das Erscheinen eines dynamisch geladenen Elements"""
    WebDriverWait(driver, timeout).until(
        EC.presence_of_element_located((By.CSS_SELECTOR, selector))
    )
    # ZusÀtzliche Verzögerung nach dem Erscheinen des Elements
    time.sleep(random.uniform(0.3, 0.8))

Einstellungen zum Schutz in Anti-Detect-Browsern

Wenn Sie mit Arbitrage, Multi-Accounting oder anderen Aufgaben arbeiten, bei denen AnonymitĂ€t entscheidend ist, verwenden Sie Anti-Detect-Browser: Dolphin Anty, AdsPower, Multilogin, GoLogin. Sie verfĂŒgen ĂŒber integrierte Schutzmechanismen gegen Timing-Angriffe, mĂŒssen jedoch richtig konfiguriert werden.

Dolphin Anty: Einstellung der menschlichen Eingabe

In Dolphin Anty gibt es die Funktion "Human Typing" – automatische Nachahmung der menschlichen Texteingabe. Einstellungen:

  • Öffnen Sie das Browserprofil → Registerkarte "Automation"
  • Aktivieren Sie "Human Typing Emulation"
  • Konfigurieren Sie die Parameter:
    • Durchschnittliche Tippgeschwindigkeit: 150-250 Zeichen/Minute (realistische Geschwindigkeit)
    • Variation: 30-50% (Schwankungen der Geschwindigkeit zwischen den Zeichen)
    • Pausen bei Satzzeichen: aktiviert (Pausen bei Satzzeichen)
    • ZufĂ€llige Tippfehler: 2-5% (zufĂ€llige Tippfehler mit Korrektur)

Danach wird jede Texteingabe ĂŒber die API von Dolphin automatisch einen Menschen nachahmen.

AdsPower: Einstellung der Mausbewegung

AdsPower ermöglicht es, die Bewegungsmuster eines echten Benutzers aufzuzeichnen und wiederzugeben:

  1. Öffnen Sie das Profil → "Erweiterte Einstellungen" → "Mausverhalten"
  2. WĂ€hlen Sie den Modus "Real User aufzeichnen":
    • Öffnen Sie den Browser im normalen Modus
    • FĂŒhren Sie typische Aktionen aus (Klicks, Scrollen, Mausbewegungen)
    • AdsPower wird die Bewegungsbahnen aufzeichnen
  3. Bei der Automatisierung ĂŒber die API wird AdsPower die aufgezeichneten Muster mit Variationen wiedergeben

Multilogin: Canvas Noise und WebGL Timing

Multilogin fĂŒgt Rauschen (noise) in Canvas- und WebGL-FingerabdrĂŒcke ein, was sich auf Timing-Angriffe auswirkt, die mit dem Rendering verbunden sind:

  • Profil → "Fingerprint-Einstellungen" → "Canvas"
  • Aktivieren Sie "Canvas Noise" (fĂŒgt Mikrozögerungen beim Rendern von Canvas hinzu)
  • Aktivieren Sie "WebGL Metadata Masking" (maskiert GPU-Eigenschaften, die die Rendergeschwindigkeit beeinflussen)

Dies schĂŒtzt vor der Erkennung durch die Analyse der AusfĂŒhrungszeit von Canvas.toDataURL() und WebGL-Operationen.

Empfehlung: Wenn Sie mit Multi-Accounting auf Facebook, Instagram oder TikTok arbeiten, verwenden Sie unbedingt Anti-Detect-Browser in Kombination mit hochwertigen residential Proxys – das minimiert das Risiko von Chain-Bans und Erkennung durch IP.

Fortgeschrittene Techniken zur Umgehung der Timing-Erkennung

FĂŒr besonders geschĂŒtzte Plattformen (Google, Facebook, Bankwebsites) sind grundlegende Methoden möglicherweise nicht ausreichend. Lassen Sie uns fortgeschrittene Techniken betrachten.

1. Umgehung der Performance API

Sie können die Methoden der Performance API ĂŒberschreiben, um realistische Werte anstelle der tatsĂ€chlichen zurĂŒckzugeben:

// Skriptinjektion zur Umgehung von performance.now()
const script = `
  (function() {
    const originalNow = performance.now.bind(performance);
    let offset = 0;
    let lastValue = 0;
    
    performance.now = function() {
      const realValue = originalNow();
      // FĂŒgen Sie zufĂ€lligen Rauschen zur Zeit hinzu
      const noise = Math.random() * 2 - 1; // von -1 bis +1 ms
      let fakeValue = realValue + offset + noise;
      
      // GewĂ€hrleistung der Monotonie (Zeit lĂ€uft nicht zurĂŒck)
      if (fakeValue <= lastValue) {
        fakeValue = lastValue + 0.1;
      }
      
      lastValue = fakeValue;
      return fakeValue;
    };
  })();
`;

// Puppeteer: Injektion beim Erstellen der Seite
await page.evaluateOnNewDocument(script);

Achtung: Diese Methode kann durch die ÜberprĂŒfung der IntegritĂ€t nativer Methoden erkannt werden. Verwenden Sie sie nur auf Websites ohne starken Schutz.

2. Drosselung von CPU und Netzwerk

Das Chrome DevTools-Protokoll ermöglicht es, CPU und Netzwerk kĂŒnstlich zu verlangsamen, damit die Ladezeiten natĂŒrlicher aussehen:

// Puppeteer: Verlangsamung der CPU um das Zweifache
const client = await page.target().createCDPSession();
await client.send('Emulation.setCPUThrottlingRate', { rate: 2 });

// Verlangsamung des Netzwerks (Emulation von 3G)
await page.emulateNetworkConditions({
  offline: false,
  downloadThroughput: 1.5 * 1024 * 1024 / 8, // 1.5 Mbps
  uploadThroughput: 750 * 1024 / 8,          // 750 Kbps
  latency: 40                                 // 40ms Verzögerung
});

Dies erhöht die Ladezeiten von Seiten und die AusfĂŒhrung von JavaScript und macht das Profil Ă€hnlicher zu einem echten Benutzer mit durchschnittlicher Internetgeschwindigkeit.

3. Nachahmung von HintergrundaktivitÀten

Echte Benutzer bleiben nicht auf einem Tab – sie wechseln zwischen Tabs, minimieren Fenster, lassen sich ablenken. Imitieren Sie dies:

async function simulateTabSwitch(page) {
  // Emulieren des Wechsels zu einem anderen Tab (Page Visibility API)
  await page.evaluate(() => {
    Object.defineProperty(document, 'hidden', {
      get: () => true,
      configurable: true
    });
    
    document.dispatchEvent(new Event('visibilitychange'));
  });
  
  // Pause (Benutzer sieht sich einen anderen Tab an)
  await page.waitForTimeout(Math.random() * 3000 + 2000);
  
  // ZurĂŒck zum Tab wechseln
  await page.evaluate(() => {
    Object.defineProperty(document, 'hidden', {
      get: () => false,
      configurable: true
    });
    
    document.dispatchEvent(new Event('visibilitychange'));
  });
}

// Verwendung: zufÀllig wÀhrend der Arbeit "ablenken"
if (Math.random() < 0.15) {  // 15% Wahrscheinlichkeit
  await simulateTabSwitch(page);
}

4. Verwendung realer User Timing Marks

Einige Websites erstellen ihre eigenen Zeitmarken ĂŒber die User Timing API. FĂŒgen Sie realistische Marken hinzu:

// Erstellen realistischer Timing-Marken
await page.evaluate(() => {
  // Nachahmung des "Denkens" des Benutzers vor einer Aktion
  performance.mark('user-started-reading');
  
  setTimeout(() => {
    performance.mark('user-found-button');
    performance.measure('reading-time', 'user-started-reading', 'user-found-button');
  }, Math.random() * 2000 + 1000);
});

5. Rotation von Proxys zur Verringerung der statistischen Korrelation

Selbst wenn jede Instanz Ihres Skripts randomisierte Verzögerungen hat, können Anti-Fraud-Systeme Korrelationen erkennen, wenn alle Anfragen von einer IP kommen. Verwenden Sie die Rotation von Proxys:

  • FĂŒr Parsing- und Massenaufgaben: Datacenter-Proxys mit automatischer Rotation alle 5-10 Minuten
  • FĂŒr die Arbeit mit sozialen Netzwerken und Werbung: residential Proxys mit Sitzungsbindung (sticky sessions)
  • FĂŒr mobile Plattformen (Instagram, TikTok): Mobile Proxys mit Rotation nach Timer oder auf Anfrage

Die Rotation von IPs verringert die Wahrscheinlichkeit, dass das Anti-Fraud-System genĂŒgend Daten fĂŒr die statistische Analyse Ihrer Timing-Muster sammeln kann.

Fazit

Timing-Angriffe sind eine komplexe Methode zur Erkennung von Automatisierung, die einen umfassenden Schutzansatz erfordert. Die wichtigsten Erkenntnisse:

  • Verwenden Sie keine festen Verzögerungen – randomisieren Sie immer die Zeit zwischen den Aktionen unter Verwendung einer Normalverteilung
  • Nachahmung kontextueller Verzögerungen – verschiedene Aktionen erfordern unterschiedliche Zeiten (Seiten lesen ≠ auf einen Button klicken)
  • FĂŒgen Sie VariabilitĂ€t in die Reihenfolge der Aktionen ein – zufĂ€llige Scrolls, Klicks, Tabwechsel
  • Verwenden Sie sanfte Mausbewegungen – Bibliotheken wie ghost-cursor (Puppeteer) oder pyautogui (Selenium)
  • Nachahmung der natĂŒrlichen Tippgeschwindigkeit – zeichenweise Eingabe mit Pausen bei Satzzeichen
  • Konfigurieren Sie Anti-Detect-Browser – Dolphin Anty, AdsPower und Multilogin haben integrierte Schutzmechanismen gegen Timing-Angriffe
  • Kombinieren Sie mit hochwertigen Proxys – die Rotation von IPs verringert die Möglichkeit statistischer Analysen

Denken Sie daran: Es gibt keinen perfekten Schutz. Anti-Fraud-Systeme entwickeln sich stĂ€ndig weiter und fĂŒgen neue Erkennungsmethoden hinzu. Ihre Aufgabe ist es, das Verhalten des Skripts so nah wie möglich an einem echten Benutzer zu halten und die Umgehungsmethoden regelmĂ€ĂŸig zu aktualisieren.

Wenn Sie mit der Automatisierung von Browsern fĂŒr Parsing, Tests oder andere Aufgaben arbeiten, empfehlen wir die Verwendung von residential Proxys – sie bieten das höchste Maß an AnonymitĂ€t und minimieren das Risiko der Erkennung durch die IP-Adresse. FĂŒr mobile Plattformen sind mobile Proxys besser geeignet, die echte Benutzer von Mobilfunkanbietern nachahmen.

```