3

我管理的 PHP/MySQL 站点之一是一个社交网络,我注意到垃圾邮件发送者会向其他几个用户发送大量外观相似的消息。

由于同一用户帐户发送的消息数量以及发送的消息的相似性,似乎应该相对容易识别以这种方式向其他用户发送垃圾邮件的用户,但我只是不知道该怎么做在 PHP/MySQL 中。消息作为 type 存储在 DB 中TEXT

如何识别这些垃圾邮件发送者,以便在他们开始发送太多看起来相似的消息时自动将其删除?

编辑:

垃圾邮件通常至少是一段文本,因此我们可以安全地忽略少于100 个字符的邮件并自动让这些邮件通过。

4

3 回答 3

3

垃圾邮件里面会有链接,所以你可以过滤掉那些没有链接的。

并且您应该首先尝试防止,因此如果一个用户开始在短时间内向许多用户发送许多消息,则可能是垃圾邮件。

您可以通过在会话中使用某种计数器来做到这一点,您将在每条发送给新用户的消息时增加它,如果它每小时超过 20 个(我只是编造了这个数字以使其高效,您将需要一些测试)他可能正在发送垃圾邮件并开始向他询问验证码或阻止他的聊天 15 分钟,将他报告给管理员以手动检查

于 2013-04-25T11:00:16.883 回答
1

您可以使用以下方法搜索与他们现在发布的消息相似的消息。

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

这将选择与当前用户的某些内容相匹配的消息。

希望能帮助到你。

于 2013-04-25T10:54:05.570 回答
1

现在,人类可以确定哪些发件人是可接受的,哪些是垃圾邮件发送者。一个可以看到每个人的消息的人,更是如此。但是您不想阅读每条消息!

首先,您需要有一个消息标志或状态,以便可以将消息添加到数据库中,但不会出现在收件人的收件箱中,因为怀疑是垃圾邮件。

其次,您需要有一个用户标志或状态,以便可以防止用户发送更多消息,因为怀疑是垃圾邮件。

我认为最好的方法是:

  • 向消息中添加三个新的数据库字段 - 单词、链接、标志状态(两个文本和一个小整数)
  • 向用户添加一个新字段 - spamwarnings (int)
  • 让 PHP 在添加消息时对其进行处理。过滤掉常用词 (a, the) 和收件人姓名和 URL,并将唯一词words和唯一链接保存在links.
  • 在将消息添加到数据库时进行第一次垃圾邮件测试(见下文)(因为您已经在 PHP 中获得了消息文本,现在是检查它的好时机)。如果分数很高,请将其标记为自动/手动审核。
  • 允许用户将邮件标记为垃圾邮件
  • 隐藏用户收件箱和通知中标记的邮件
  • 每小时运行第二次垃圾邮件评分
  • 让人类缓和可疑的垃圾邮件,发布或删除它

首次通过垃圾邮件评分

  • 收件人是否曾向发件人发送过消息?是 = -10,否 = +2
  • 邮件中有链接吗?是+2,每个链接+1
  • 邮件是否包含某些“垃圾邮件”字样?每个单词+1。
  • 发件人在过去一小时内发送了多少条消息?每个+1。
  • 用户的垃圾邮件警告计数是否为 2 或更多?5 分会将其标记为审查,并增加用户的垃圾邮件警告计数。

第二遍垃圾邮件评分

  • 这是将标记的消息与同一发件人使用此页面上其他想法的组合的其他标记的消息进行比较的部分。

人类节制

  • 我看不出如何避免这种情况,但以上将减少要阅读的消息数量。此外,这可以通过阅读独特的单词和链接来完成(保持一些隐私)。

还应该可以使用上述结构中的大部分内容来缓和不适当内容的消息。

于 2013-04-25T12:20:13.883 回答