web-dev-qa-db-ja.com

Akismetプラグインを使用してカスタムコンテンツタイプをスパムフィルタリングする方法

カスタムコンテンツタイプに複数の入力ボックスがあり、テキストエリアがありません。そのためにWPが付いているAkismetを使うことができますか?できれば、どうすればいいですか。

例えば。名前、住所、市区町村、電話番号、電子メールの形式で5つの入力ボックスがある場合は、フロントページから保存し、それ以降の処理に使用します。

その上でAkismetを使用する方法?出来ますか?

inputbosexの名前がname、address、city、telephone、emaiの場合、Akismetプラグインをどのように設定しますか。迷惑メールがデータベースに保存されないようにするにはどうすればよいですか。 (私はfunctions.phpの私の関数でakismetを使ってデータに保存される前にデータをフィルタ処理する必要があります。

$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.

Wordpressに同梱されているAkismetプラグインを使ってそのような状態をどうやってやるのですか?

5
Derfder

アキメット - 図書館:

最初に、たくさんのAkismetライブラリがあることを述べたいと思います。

http://akismet.com/development/

これがAPIドキュメントです。

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

Akismet - WordPressプラグイン:

しかし私が理解しているように、あなたはAkismetWordPressプラグインをlibraryとして使いたいのです。

次のコードスニペットは、Akismetプラグインに基づく簡単な概念実証です。

// 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 );
}

akismet_http_post関数を使用して、データをAkismetサーバーに送信します。

APIの資料によると、以下の パラメータ が必要です。

blog, user_ip, user_agent

referrerパラメータのつづりに関しては注意が必要です;-)

その他の便利なAkismet関数は、たとえば次のとおりです。

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

本当のスパムコメントをテストしたときに私が得た応答は、次のようでした:

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
)

正(true)spamの結果。

次のステップはこれを使用可能な関数またはクラスに変更することです。

いくつかのカスタムフォームフィールドを使用しているので、それらを次のようにマッピングできると思います。

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

私はakismetがあなたにとって正しいツールだとは思いません。 akismetが機能する方法は、何百万ものコメントの内容を分析してスパムパターンを検出することに頼っていますが、あなたのフォームの内容はコメントと似ていないので、分析は無意味です。 akismetがあなたのコードでできる唯一のことは、既知のsamming IPアドレスをチェックすることです。これは honeypotプロジェクトのような他のサービスでできることです 商業サイトakismetでは、何かがスパムであると判断したときに何をするのかを決める必要があることを忘れないでください。プラグインのデフォルトの動作は、人間がコメントを誤検知していないかチェックできるように、コメントをDBに保存することです。たとえそれらがsamとしてフラグを立てられたとしても、あなたはあなたのフォームをDBにも保存する必要があるでしょうがあなたはそれのための新しいUIを開発する必要があるでしょう。

Akismetを使用するよりももっと効果的かもしれないもっと簡単な解決策があります。単にJSを使用して既知の値を持つ隠し入力をフォームに注入し、サーバー側でサブミションを処理するときに値を検証するだけです。検証に失敗した場合、フォームはおそらくスパムです。 JSを使用していない人がフォームを送信できないのではないかと心配になる場合は、常にフォームをフォームに送信するようにJSを有効にする必要があるという通知を追加し、それをJSで非表示にすることができます。現在、ほとんどのスパムロボットはJSを解析して実行していません。これはスパムを阻止するための非常に良い方法です。

0
Mark Kaplun