如何检查用户是否在向其他用户发送类似邮件?

时间:2013-04-25 10:18:02

标签: php mysql spam spam-prevention

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

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

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

修改

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

3 个答案:

答案 0 :(得分:3)

垃圾邮件内部会有链接,因此您可以过滤掉没有链接的邮件。

你应该首先尝试预防,所以如果一个用户开始在很短的时间内向很多用户发送许多邮件,那么它可能就是垃圾邮件。

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

答案 1 :(得分:1)

您可以使用以下方法搜索与他们现在发布的邮件类似的邮件。

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

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

希望它有所帮助。

答案 2 :(得分:1)

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

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

其次,您需要拥有用户标记或状态,以防止用户发送更多邮件,因为怀疑是垃圾邮件。

我认为最好的方法是:

  • 在消息中添加三个新的数据库字段 - 单词,链接,flagstatus(两个文本和一个小的int)
  • 向用户添加一个新字段 - spamwarnings(int)
  • 让PHP处理添加的消息。过滤掉常用字词(a,the)以及收件人和网址的名称,并在wordslinks中的唯一链接中保存唯一字词。
  • 当消息被添加到数据库时,首先进行垃圾邮件测试(见下文)(因为您已经在PHP中使用了消息文本,现在是检查它的好时机)。如果分数很高,请将其标记为自动/手动审核。
  • 允许用户将邮件标记为垃圾邮件
  • 隐藏来自用户收件箱和通知的已标记邮件
  • 每小时运行第二次垃圾邮件评分
  • 让人类控制可疑垃圾邮件,释放或删除它

首次通过垃圾邮件评分

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

第二次通过垃圾邮件评分

  • 这是使用此页面上其他构思的组合将标记的邮件与同一发件人的其他已标记邮件进行比较的部分。

人类适度

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

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