Way to bulk process/delete flagged registrations?

Ciao @kirupa

Mi è capitato di avere in qualche modo lo stesso problema.

Abbiamo esaminato migliaia di post/utenti segnalati automaticamente (di sistema e Akismet) sul mio forum.
L’accuratezza di entrambi, di sistema e Akismet, era molto vicina al 100% (1 falso positivo a mia conoscenza su 2500 segnalazioni). Non è così per ogni forum, quindi devi essere sicuro di ciò che stai facendo se vuoi automatizzare il ban degli utenti segnalati automaticamente.

Alla fine, ho creato uno script PHP utilizzando i dati di un webhook di Discourse:

Ho prima creato il webhook:

Poi ho usato Use Discourse webhooks with PHP per ricevere la richiesta e analizzare i dati.

Ho aggiunto codice personalizzato per attivare il ban automatico inviando una richiesta API a Discourse, basata su criteri arbitrari:

Ecco il codice finale:

<?php

// Verifica immediatamente l'autenticità della richiesta.
if (array_key_exists('HTTP_X_DISCOURSE_EVENT_SIGNATURE', $_SERVER)) {
    $discourse_payload_raw = file_get_contents('php://input');
    $discourse_payload_sha256 = substr($_SERVER['HTTP_X_DISCOURSE_EVENT_SIGNATURE'], 7);
    
    // Per sicurezza, configura il webhook con un segreto in Discourse e impostalo qui sotto.
    $discourse_payload_secret = 'xxxxxxxxxxxxxxxxxxxxx';
    
    // Verifica che la richiesta sia stata inviata da un webhook autorizzato.
    if (hash_hmac('sha256', $discourse_payload_raw, $discourse_payload_secret) == $discourse_payload_sha256) {
        echo 'ricevuto';
    }
    else {
        die('autenticazione fallita');
    }
}
else {
    die('accesso negato');
}

// Prepara il payload per l'uso nello script PHP.
$discourse_json = json_decode($discourse_payload_raw);

$reviewable = $discourse_json->reviewable;

// Imposta l'URL dell'API
$api_url = "https://unicyclist.com/review/$reviewable->id/perform/delete_user?version=0";

// Verifica che le proprietà "type" e "score" siano valide
if (($reviewable->type == "ReviewableUser" || $reviewable->type == "ReviewableAkismetUser" || $reviewable->type == "ReviewableQueuedPost") && $reviewable->score > 0) {
  // Imposta le opzioni curl
    $options = array(
        CURLOPT_URL => $api_url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "PUT", // Imposta il metodo di richiesta su PUT
        CURLOPT_HTTPHEADER => array(
            "Api-Key: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
            "Api-Username: system"
        )
    );
    // Inizializza la sessione curl
    $curl = curl_init();
    curl_setopt_array($curl, $options);
    // Effettua la chiamata API
    $response = curl_exec($curl);
    curl_close($curl);
    // Decodifica la risposta
    $response_data = json_decode($response);
    print_r($response_data);
}   else {
    exit;
}

?>

Finora funziona perfettamente.

:warning: Nota che il mio codice potrebbe essere molto pericoloso da usare in un altro contesto e il contenuto deve essere valutato attentamente.

Ad esempio, una segnalazione “ReviewableUser” potrebbe essere impostata su utenti nei forum che necessitano di validare manualmente gli utenti (non so se sia il caso, è solo un esempio). Altri forum potrebbero aver modificato le soglie di rilevamento spam nelle loro impostazioni, o il rilevamento automatico potrebbe semplicemente essere meno accurato sul loro forum.

3 Mi Piace