如何检查用户是否发送了类似邮件的其他用户?
我管理的PHP/MySQL网站之一是社交网络,我注意到垃圾邮件发送者会向其他几个用户发送大量类似外观的消息。如何检查用户是否发送了类似邮件的其他用户?
由于同一个用户帐户发送的消息数量以及这些消息发送的相似性,似乎应该比较容易地识别以这种方式发送其他用户的用户,但是我并没有知道如何在PHP/MySQL中做到这一点。消息以类型TEXT
存储在DB中。
我该如何识别这些垃圾邮件发送者,以便我们可以在他们开始发送太多类似外观的邮件时自动清除它们?
编辑:
垃圾短信通常至少一段文字,所以我们可以放心地与小于字符忽略的消息,并自动让那些通过。
您可以使用以下方法搜索与现在发布的消息类似的消息。
SELECT * FROM `messages`
WHERE MATCH (`messages`.`content`) against ($message)
&& `messages`.`user` = $user
这将选择匹配当前用户的一些内容的消息。
希望它有帮助。
垃圾邮件会有链接,所以你可以过滤掉那些没有链接。
而你应该尽量预防,所以如果一个用户开始在很短的时间内向很多用户发送很多消息,可能会是垃圾邮件。
您可以通过具有某种会话计数器做到这一点,你会与每个消息增加它发送给新用户时,如果是超过20个小时(我只是做了这个号码,以使其有效,您需要一些测试),他可能会发送垃圾邮件,并开始要求他提供验证码或阻止他聊天15分钟,向管理员举报以手动检查
现在,人类可以确定哪些发件人可以接受,哪些是垃圾邮件发送者。一个能够看到每个人的信息的人,更是如此。但你不想阅读每一条消息!
首先,您需要有一个消息标志或状态,以便可以将消息添加到数据库,但由于怀疑垃圾邮件而未出现在收件人的收件箱中。
其次,您需要拥有用户标志或状态,以防止用户发送更多邮件,因为怀疑垃圾邮件。
我认为最好的办法是:
- 添加三个新的数据库字段的信息 - 也就是说,链接,flagstatus(两个文本和一个小INT)
- 一个新字段添加到用户 - spamwarnings( int)
- 让PHP在添加消息时处理消息。筛选出常见单词(a,the)和收件人名称以及URL并在
words
中保存唯一字词,并在links
中保存唯一链接。 - 随着邮件被添加到数据库中,首先进行垃圾邮件测试(请参阅下文)(因为您已经在PHP中拥有邮件文本,现在是检查它的好时机)。如果得分较高,请将其标记为自动/手动审核。
- 允许用户标记为垃圾邮件
- 隐藏标记从用户的收件箱中的邮件,并通知
- 运行的垃圾邮件得分的第二次每小时
- 有人类中度可疑垃圾邮件,释放它或删除它
一通垃圾邮件评分
- 有收件人曾经发出了一个信息发送者?是= -10,否= +2
- 信息中是否有链接? +2表示是,每个链接表示+1 +1
- 该邮件是否包含某些“垃圾邮件”字?每个单词+1。
- 发件人在过去一小时内发送了多少封邮件?每个+1。
- 用户的垃圾短信数量是否为2或更多? 评分5会标记此评论,并增加用户的垃圾短信数量。
第二次通过垃圾邮件评分
- 这是将通过使用此页面上的其他想法的组合相同的发送者比较其它标记邮件标记邮件的一部分。
人力适度
- 我看不出这是可以避免的,但上面会降低信息读取的数量。此外,这可以通过阅读唯一的单词和链接来完成(保持一些隐私)。
也应该可以使用上述结构的大部分来缓和不适当内容的消息。
虽然有一个问题,但没有1000种方式向某人说“你好”:p – HamZa 2013-04-25 10:34:59
@HamZaDzCyberDeV:这是真的,但垃圾邮件通常至少是一段文字,所以我们可以安全地忽略邮件少于** 100 **字符并自动让这些通过。 – ProgrammerGirl 2013-04-25 10:39:20
我的答案[这里](http://stackoverflow.com/a/12768075/)可能是一个解决你的问题的介绍。 – HamZa 2013-04-25 10:41:13