用JavaScript过滤垃圾邮件的最佳方法是什么?

8
我最近受到启发,想用JavaScript编写类似Greasemonkey的垃圾邮件过滤器,用于我使用的一些易受垃圾邮件干扰的网站(尤其是评论区)。在考虑如何实现时,我意识到有几种方法可供选择,每种方法都有优缺点。我的目标是在这个列表上进行扩展,并希望确定使用JavaScript进行客户端垃圾邮件过滤的最佳方式。
至于什么样的垃圾邮件过滤器最好,我认为应该具备以下标准:
- 最准确 - 最不容易受攻击 - 最快 - 最透明
请注意,我正在尝试使用Greasemonkey Userscripts过滤不属于我的网站上已存在的内容,换句话说,我不能防止垃圾邮件,我只能过滤它。
到目前为止,这是我编制的各种方法以及它们的缺点和优点的列表:
规则过滤器:
- 功能:通过为不同的条件(例如全大写、全非字母数字等)分配分值来“评分”消息。根据得分,消息被丢弃或保留。 - 优点:易于实现;大多数情况下透明。 - 缺点:透明度高,通常很容易通过反向工程代码来发现规则,并因此制作不会被捕捉到的消息;难以平衡分值(误判);可能很慢,必须对每个消息执行多个规则,很多时候使用正则表达式;在客户端环境中,需要服务器交互或用户交互来更新规则。
贝叶斯过滤器:
- 功能:分析单词频率(或三元组频率),并将其与已经训练好的数据进行比较。 - 优点:无需制作规则;速度快(相对而言);更难逆向工程。 - 缺点:需要训练才能有效;训练数据仍然需要JavaScript访问,通常为人类可读的JSON、XML或平面文件形式;数据集可能变得非常大;设计不良的过滤器很容易混淆,只需添加一些常见词即可降低垃圾邮件评分;未看到的单词无法准确分类,有时会导致整个消息的错误分类;在客户端环境中,需要服务器交互或用户交互来更新规则。
贝叶斯过滤器-服务器端:

功能:通过将每个消息提交到远程服务器进行分析,应用贝叶斯过滤器来进行服务器端过滤。

优点:

  • 具有常规贝叶斯过滤器的所有优点
  • 训练数据不会被用户/逆向工程师发现

缺点:

  • 流量较大
  • 仍然容易受到不常见单词的影响
  • 仍然容易添加常见单词以减少垃圾邮件
  • 服务本身可能会被滥用
  • 为了训练分类器,允许用户提交垃圾邮件样本进行训练可能是可取的。攻击者可能会滥用此服务

黑名单:

功能:对消息或其某些属性应用一组标准。如果一个或多个(或特定数量的)标准匹配,则拒绝该消息。与基于规则的过滤非常相似,因此请参阅其描述以获取详细信息。

CAPTCHA等:

这种类型的应用程序不可行。我正在尝试将这些方法应用于已经存在的网站。将使用Greasemonkey来完成这项工作;我不能在某人安装我的脚本之前就开始要求在这些地方使用CAPTCHA。


有人能帮我填空吗?谢谢。


1
所以你的目标是为那些没有足够内置保护的网站添加垃圾邮件检查,以便在人们浏览时进行动态评论删除。这很有趣,尽管我不确定有多少网站会从中受益。 - Winston Ewert
我真正想做的是创建一个允许这样做的平台。这是首要任务。然后我会将其应用到不同的网站上。Facebook 是我的主要目标之一,因为大多数评论都是垃圾邮件。 - Chris Laplante
垃圾邮件过滤器在后端添加起来很容易。如果相关网站的管理员太懒不想这么做,你最好不要使用该网站。为什么要为一个糟糕的网站付出你的努力呢?你提到Facebook有点奇怪,因为我从未在那里看到过垃圾邮件。你可能只需要取消与垃圾邮件发送者的好友关系... - Cerin
1个回答

4

没有“最好”的方式,特别是对于所有用户或所有情况。

保持简单:

  1. 首先,将GM脚本隐藏包含链接和可能普遍存在粗俗词汇的所有评论(F*ck,Presbyterian等)。;)
  2. 然后,脚本联系您的服务器,并让服务器根据X标准判断每个评论(下面会详细介绍)。
  3. 根据服务器响应显示或隐藏评论。如果超时,则根据用户首选项设置显示或显示(“过滤器服务器宕机时该怎么办?(显示/隐藏带有链接的评论)”)。
  4. 这就是GM脚本的全部内容;其余由服务器处理。

至于实际的服务器/过滤标准...
最重要的是不要尝试猜测用户想要过滤什么!这会因人而异,甚至因心情而异。

设置服务器使用一些粗俗词汇、不良链接目的地(例如.ru和.cn域)和公共垃圾邮件过滤服务的组合。

最重要的是为用户提供某种选择和理想调整适用于他们的内容的方式。


1
“没有脏话”——乔治·卡林 - Stephen P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接