it-swarm.com.de

Wie kann ich mit dem Akismet-Plugin einen benutzerdefinierten Inhaltstyp durch Spam filtern?

Ich habe mehrere Eingabefelder und keine Textbereiche in meinem benutzerdefinierten Inhaltstyp. Kann ich dafür Akismet verwenden, das mit WP geliefert wird? Wenn ich kann, wie mache ich das?

Z.B. Wenn ich 5 Eingabefelder habe wie: Name, Adresse, Ort, Telefon, E-Mail in meinem Formular, die von der Startseite gespeichert und für die weitere Verarbeitung verwendet werden.

Wie benutzt man Akismet dafür? Ist es möglich?

wenn die Namen des Inputbosex sind: Name, Adresse, Stadt, Telefon und E-Mail, wie würden Sie das Akismet-Plugin einrichten? Was soll ich tun, damit in meiner Datenbank keine Spam-Mails gespeichert werden? (Ich muss die Daten filtern, bevor sie mit akismet in meiner Funktion in functions.php gespeichert werden. Wenn ich also die Werte wie z.

$name = $_POST['name'];
$name = $_POST['address'];
$name = $_POST['city'];
$name = $_POST['telephone'];
$name = $_POST['email'];

// here I need if condition to use akismet database to redirect back to the post without executing the rest of my code in my function.

Wie mache ich eine solche Bedingung mit dem Akismet-Plugin, das mit Wordpress geliefert wird?

5
Derfder

Akismet - Bibliotheken:

Zuerst möchte ich erwähnen, dass es viele Akismet Bibliotheken gibt:

http://akismet.com/development/

und hier sind die API-Dokumente:

http://akismet.com/development/api/

Akismet - WordPress Plugin:

Aber so wie ich es verstehe, möchten Sie das Akismet WordPress-Plugin als Ihre Bibliothek verwenden.

Das folgende Code-Snippet ist ein einfacher Proof-of-Concept, der auf dem Akismet -Plugin basiert:

// We assume that Akismet is installed with the corresponding API key
if( function_exists( 'akismet_http_post' ) )
{   
    global $akismet_api_Host, $akismet_api_port;

    // data package to be delivered to Akismet (Modify this to your needs)
    $data = array( 
        'comment_author'        => 'Mr. Spam',
        'comment_author_email'  => '[email protected]',
        'comment_author_url'    => 'spamalot.com',
        'comment_content'       => 'Hello Spam World!',
        'user_ip'               => '123.123.123.123',
        'user_agent'            => '',
        'referrer'              => '',
        'blog'                  => 'http://example.com',
        'blog_lang'             => 'en_US',
        'blog_charset'          => 'UTF-8',
        'permalink'             => 'http://example.com/hello-world',
        'is_test'               => TRUE,
    );

    // construct the query string
    $query_string = http_build_query( $data );
    // post it to Akismet
    $response = akismet_http_post( $query_string, $akismet_api_Host, '/1.1/comment-check', $akismet_api_port );
    // check the results        
    $result = ( is_array( $response ) && isset( $response[1] ) ) ? $response[1] : 'false';
    // display the result (it can be 'true', 'false' or some error message )    
    printf( 'Is it spam? Akismet says: %s', $result );
}

wo ich die akismet_http_post Funktion benutze, um die Daten auf den Akismet-Servern zu veröffentlichen.

Gemäß den API-Dokumenten sind die folgenden Parameter erforderlich:

blog, user_ip, user_agent

und man sollte vorsichtig mit der Schreibweise des Parameters referrer sein ;-)

Andere nützliche Akismet Funktionen sind zum Beispiel:

- akismet_get_key()
- akismet_check_key_status()
- akismet_verify_key()

Die Antwort, die ich beim Testen eines echten Spam-Kommentars erhielt, war wie folgt:

Array
(
    [0] => Array
        (
            [server] => nginx
            [date] => Wed, 23 Oct 2013 12:44:37 GMT
            [content-type] => text/plain; charset=utf-8
            [content-length] => 4
            [connection] => close
            [x-akismet-server] => 192.0.80.244
            [x-akismet-guid] => 07d0136b53cda37432ff5a7b6d86c843
        )

    [1] => true
)

mit dem positiven (true) Spam Ergebnis.

Der nächste Schritt wäre, dies in eine verwendbare Funktion oder eine Klasse zu ändern.

Da Sie einige benutzerdefinierte Formularfelder verwenden, können Sie sie wie folgt zuordnen:

name                       --> comment_author
email                      --> comment_author_email
address + city + telephone --> comment_content
7
birgire

Ich denke nicht, dass akismet das richtige Werkzeug für Sie ist. Die Funktionsweise von akismet beruht auf der Analyse des Inhalts von Millionen von Kommentaren und der Erkennung von Spam-Mustern. Der Inhalt Ihres Formulars ist jedoch nicht mit Kommentaren vergleichbar und daher ist die Analyse wertlos. Das Einzige, was akismet mit Ihrem Code tun kann, ist, nach bekannten Sammeln-IP-Adressen zu suchen. Dies können Sie mit anderen Diensten wie dem Honeypot-Projekt tun, das möglicherweise eine bessere Alternative ist, da Sie für die Verwendung von akismet bei jedem zahlen müssen Gewerbefläche. Denken Sie daran, dass Sie bei akismet auch entscheiden müssen, was Sie tun, wenn etwas als Spam gekennzeichnet wird. Das Standardverhalten des Plugins besteht darin, die Kommentare in der Datenbank zu speichern, damit ein Mensch sie auf falsch positive Ergebnisse überprüfen kann. Um nachzuahmen, dass Sie Ihre Formulare auch dann in der Datenbank behalten müssen, wenn sie als sam gekennzeichnet sind, müssen Sie jedoch eine neue Benutzeroberfläche dafür entwickeln.

Es gibt eine einfachere Lösung, die möglicherweise noch effektiver ist als die Verwendung von akismet. Verwenden Sie einfach JS, um eine verborgene Eingabe mit einem bekannten Wert in das Formular einzufügen und den Wert bei der Verarbeitung der Übermittlung auf der Serverseite zu validieren. Wenn die Validierung fehlschlägt, handelt es sich wahrscheinlich um Spam. Wenn Sie Bedenken haben, dass Personen, die JS nicht verwenden, das Formular nicht senden können, können Sie jederzeit einen Hinweis hinzufügen, dass JS das Formular an Ihr Formular senden kann, und es in JS ausblenden. Die meisten Spambots analysieren und führen JS derzeit nicht aus. Dies sollte eine sehr gute Möglichkeit sein, Spam zu stoppen.

0
Mark Kaplun