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

时间:2010-10-06 00:00:21

标签: javascript artificial-intelligence greasemonkey spam spam-prevention

我最近受到鼓舞,我在JavaScript中使用Greasemonkey风格编写垃圾邮件过滤器,因为我使用的垃圾邮件容易出现垃圾邮件(特别是在评论中)。当我考虑如何解决这个问题时,我意识到我有几个选择,每个选项都有优点/缺点。 此问题的目标是扩展我创建的此列表,并希望确定使用JavaScript进行客户端垃圾邮件过滤的最佳方式。

至于什么使垃圾邮件过滤器成为“最佳”,我会说这些是标准:

  • 最准确
  • 最不容易受到攻击
  • 最快
  • 最透明

另请注意,我正在尝试使用Greasemonkey Userscripts过滤已经存在于非我的网站上的内容。换句话说,我无法阻止垃圾邮件;我只能过滤它。

到目前为止,我尝试编制各种方法的清单及其缺点和好处:


基于规则的过滤器:

它的作用:通过为不同的标准指定一个点值来“分级”消息(即全部大写,所有非字母数字等)根据分数,消息被丢弃或保持。

好处:

  • 易于实施
  • 大部分透明

缺点:

  • 透明 - 通常很容易对代码进行反向工程以发现规则,从而制作无法获取的消息
  • 难以平衡点值(误报)
  • 可能很慢;必须对每条消息执行多个规则,很多时候使用正则表达式
  • 在客户端环境中,更新规则需要服务器交互或用户交互

贝叶斯过滤:

它的作用:分析词频(或三角频率)并将其与训练的数据进行比较。

好处

  • 无需制定规则
  • 快速(相对)
  • 更难以逆向工程

缺点:

  • 要求培训有效
  • JavaScript仍然可以访问训练有素的数据;通常采用人类可读的JSON,XML或平面文件的形式
  • 数据集可以变得非常大
  • 设计不佳的过滤器很容易混淆,有助于降低 spamacity 等级的常用词汇
  • 以前未见过的词语无法准确分类;有时会导致整个邮件的分类错误
  • 在客户端环境中,更新规则需要服务器交互或用户交互

贝叶斯过滤 - 服务器端:

它的作用:通过将每条消息提交给远程服务器进行分析来应用贝叶斯过滤服务器端。

优点:

  • 定期贝叶斯过滤的所有好处
  • 不会向用户/逆向工程师透露培训数据

缺点:

  • 交通拥挤
  • 仍然容易受到罕见词语的影响
  • 仍然容易添加常用词以减少spamacity
  • 服务本身可能被滥用
  • 要训练分类器,可能需要允许用户提交垃圾邮件样本以进行培训。攻击者可能滥用此服务

黑名单:

它的作用:将一组条件应用于消息或其某些属性。如果一个或多个(或特定数量)标准匹配,则拒绝该消息。很像基于规则的过滤,因此请参阅其详细说明。

CAPTCHA等:

此类应用程序不可行。我正在尝试将这些方法应用于已存在的网站。 Greasemonkey将用于做到这一点;在某人安装我的脚本之前,我无法开始要求CAPTCHA。


任何人都可以帮我填空吗?谢谢,

1 个答案:

答案 0 :(得分:2)

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

保持简单:

  1. 让GM脚本最初隐藏所有包含链接的评论,也可能隐藏普遍不好的词(F * ck,Presbyterian等)。 ;)
  2. 然后脚本会联系您的服务器,并让服务器按X条件判断每条评论(详见下文)。
  3. 根据服务器响应显示或隐藏评论。如果发生超时,则根据用户首选项设置显示或显示(“当过滤服务器关闭时该怎么办?(显示/隐藏带链接的评论)”。
  4. 这就是GM脚本;其余的由服务器处理。
  5. 至于实际的服务器/过滤标准......
    最重要的是不敢假设您可以猜测用户想要过滤的内容!这种情况会因人而异,甚至心情变差。

    将服务器设置为使用错误字词,错误链接目标(例如.ru和.cn域名)和公共垃圾邮件过滤服务的组合。

    最重要的是为用户提供一些方法来选择并理想地调整应用的内容。