web-dev-qa-db-ja.com

ルールを使用して、特定のキーワードを使用して簡単なスパム対策検証を実行する方法

私のサイトは、意味のない電子メールアドレスと「偽の」IPアドレス(それらをブロックする方法はありません)を使用して手動でアカウントを作成するスパマーによる繰り返し攻撃を受けています。

データ比較を使用して、 Rules モジュールでノードの作成をブロックするというアイデアを思いつきましたが、機能しません。ここに私が持っているルールの要約があります:

イベント:コンテンツを保存する前

条件:テキスト比較:パラメータ:テキスト:[node:body:value]、一致するテキスト:lexaproなど[単語/式のリストを作成する方法は? 1行に1つですか?]

アクション:ページリダイレクト

更新この答え のルールから始めて、ページにリダイレクトしてノードを非公開にするルールを作成しました、ただし、単語がタイトルと本文の両方にある場合のみ。 [〜#〜]または[〜#〜]をルールに入れようとしましたが、うまくいきませんでした。

{ "rules_simple_antispam" :
  {
    "LABEL" : "Simple antispam",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_presave" : [] },
    "IF" : [
      { "text_matches" : { "text" : [ "node:title" ], "match" : "lexapro" } },
      { "text_matches" : { "text" : [ "node:body:value" ], "match" : "lexapro" } }
    ],
    "DO" : [
      { "redirect" : { "url" : "death-spam" } },
      { "node_unpublish" : { "node" : [ "node" ] } }
    ]
  }
}

ルールを機能させるには、何を変更する必要がありますか?

PS:私はコーダーではありません。

1
user54770

IMOでは、次のようなキャプチャを使用する必要があります。

reCAPTCHA

Google reCAPTCHA Webサービスを使用して、CAPTCHAシステムを改善し、電子メールアドレスを保護します。

enter image description here

OR

ドラッグ可能なキャプチャ

enter image description here

enter image description here

これを設定する方法の説明ビデオです Drupal 7 Draggable Captcha-スパムを防ぐためのよりフレンドリーな方法

スパムがまだ発生している場合、つまり実際にボットではなく人間である場合は、ポイントシステムを実装できます。ユーザーが何かをしてポイントを獲得する必要がある場合(ログインx日数またはコメントx時間数など)。ノードを作成するには、ユーザーはxポイントを持っている必要があります。

さらに、スパムフラグを実装することもできます。これにより、ユーザーはコンテンツにスパムのフラ​​グを付け、x個のフラグが立てられた場合にコンテンツを自動的に削除させることができます。

1
No Sssweat

このルールを見てください( Rules エクスポート形式):

{ "rules_block_specific_words_in_node_body" : {
    "LABEL" : "Block specific words in node body",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "REQUIRES" : [ "rules" ],
    "ON" : { "node_presave" : [] },
    "IF" : [
      { "user_has_role" : {
          "account" : [ "site:current-user" ],
          "roles" : { "value" : { "2" : "2" } }
        }
      },
      { "OR" : [
          { "text_matches" : { "text" : [ "node:title" ], "match" : "lexapro" } },
          { "text_matches" : { "text" : [ "node:body:value" ], "match" : "lexapro" } },
          { "text_matches" : {
              "text" : [ "node:title" ],
              "match" : "ANotAllowedTextStringInTitle",
              "operation" : "regex"
            }
          },
          { "text_matches" : {
              "text" : [ "node:body:value" ],
              "match" : "ANotAllowedTextStringInBody",
              "operation" : "regex"
            }
          }
        ]
      }
    ],
    "DO" : [
      { "redirect" : { "url" : "no_spammers_allowed" } },
      { "node_unpublish" : { "node" : [ "node" ] } }
    ]
  }
}

(Rules UIを使用して)独自のサイトにインポートし、実験して、ニーズに合わせるだけです。

上記のサンプルに含まれるロジックの詳細:

  • これは、認証されたユーザーにのみ適用されます(必要に応じて、そのルール条件を適用または削除します)。
  • タイトルまたは実際の本文に関する4つの検証が含まれます(これらの4つのルール条件のうち少なくとも1つが満たされている必要があります。これらのルール条件の「OR」に従って)、つまり:
    • タイトルまたは本文のコンテンツ(「レクサプロ」)の完全一致(等しい)。
    • 文字列(タイトル内)ANotAllowedTextStringInTitleまたは(本文内)ANotAllowedTextStringInBodyに関連する正規表現(regex)を使用します(ニーズに合う正規表現を使用します)。
  • ルール条件の組み合わせが満たされた場合(つまり、ロールが一致し、テキスト比較の4つのうち少なくとも1つが満たされた場合)、次の2つのルールアクションがトリガーされます。
    • 「コンテンツを保存する前に」(ルールイベント)、no_spammers_allowedのようなパスを持つページにリダイレクトを発行します。
    • ノードは非公開です。

:単語のリストを作成する最も簡単な方法は、RegEx式を使用することです(この場合、「lexapro 「もちろん、最初の2つのルール条件は廃止されます。」.

0
Pierre.Vriens