3

私が管理している PHP/MySQL サイトの 1 つはソーシャル ネットワークで、スパマーが似たようなメッセージを他の複数のユーザーに大量に送信していることに気付きました。

同じユーザー アカウントから送信されたメッセージの数と、送信されたメッセージの類似性から、この方法で他のユーザーにスパムを送信しているユーザーを特定するのは比較的簡単なはずですが、方法がわかりません。 PHP/MySQL で。メッセージは type として DB に格納されますTEXT

これらのスパマーを特定して、似たようなメッセージを大量に送信し始めたときに自動的に駆除するにはどうすればよいですか?

編集:

通常、スパム メッセージは少なくとも 1 段落のテキストであるため、 100文字未満のメッセージは安全に無視して、自動的に通過させることができます。

4

3 に答える 3

3

スパム メッセージにはリンクが含まれているため、リンクのないメッセージを除外できます。

1 人のユーザーが短時間に多数のメッセージを多数のユーザーに送信し始めた場合、それはおそらくスパムである可能性があります。

セッション中にある種のカウンターを持つことでそれを行うことができます。新しいユーザーにメッセージを送信するたびにそれをインクリメントし、1 時間あたり 20 を超える場合 (効率的にするためにこの数を作っただけです。いくつかのテストが必要になります) 彼はスパムの可能性があり、キャプチャを要求し始めるか、チャットを 15 分間ブロックし、管理者に報告して手動で確認してください

于 2013-04-25T11:00:16.883 に答える
1

現在、人間は、これらの送信者のどれが受け入れ可能で、どれがスパマーであるかを判断できます。ましてや、みんなのメッセージが見える人間。しかし、すべてのメッセージを読む必要はありません。

まず、メッセージがデータベースに追加されても、スパムの疑いがあるために受信者の受信トレイに表示されないように、メッセージ フラグまたはステータスが必要です。

次に、スパムの疑いがあるため、ユーザーがそれ以上メッセージを送信できないように、ユーザー フラグまたはステータスを設定する必要があります。

最善のアプローチは次のとおりだと思います。

  • メッセージに 3 つの新しい DB フィールドを追加 - 単語、リンク、フラグステータス (2 つのテキストと小さな int)
  • ユーザーに 1 つの新しいフィールドを追加 - spamwarnings (int)
  • 追加されたメッセージを PHP で処理します。一般的な単語 (a、the)、受信者の名前、および URL を除外し、固有の単語を に保存しwords、固有のリンクを に保存しますlinks
  • メッセージがデータベースに追加されたら、スパム テスト (以下を参照) の最初のパスを実行します (PHP のメッセージ テキストは既にここにあるため、チェックするのに適した時期です)。スコアが高い場合は、自動/手動レビューのためにフラグを立てます。
  • ユーザーがメッセージをスパムとしてマークできるようにする
  • ユーザーの受信トレイと通知からフラグ付きメッセージを非表示にする
  • スパム スコアリングの 2 回目のパスを 1 時間ごとに実行する
  • 人間が疑わしいスパムをモデレートし、リリースまたは削除する

初回通過スパム スコアリング

  • 受信者は送信者にメッセージを送信したことがありますか? はい = -10、いいえ = +2
  • メッセージにリンクはありますか? はいの場合は+2、リンクごとに+1
  • メッセージに特定の「スパム」言葉が含まれていませんか? 単語ごとに +1。
  • 過去 1 時間に送信者が送信したメッセージの数は? それぞれに+1。
  • ユーザーのスパム警告数は 2 以上ですか? スコアが 5 の場合、これは確認のためにフラグが立てられ、ユーザーのスパム警告カウントが増加します。

セカンドパス スパム スコアリング

  • これは、このページの他のアイデアの組み合わせを使用して、フラグ付きメッセージを同じ送信者による他のフラグ付きメッセージと比較する部分です。

人間の節度

  • これを回避する方法はわかりませんが、上記により、読み取るメッセージの数が減ります。また、これは、一意の単語とリンクを読み取るだけで実行できます (ある程度のプライバシーは維持されます)。

上記の構造の多くを使用して、不適切なコンテンツのメッセージを管理することも可能です。

于 2013-04-25T12:20:13.883 に答える
1

次の方法を使用して、現在投稿されているメッセージに似たメッセージを検索できます。

SELECT * FROM `messages`
WHERE MATCH (`messages`.`content`) against ($message)
&& `messages`.`user` = $user

これにより、現在のユーザーのコンテンツの一部に一致するメッセージが選択されます。

それが役に立てば幸い。

于 2013-04-25T10:54:05.570 に答える