我最近受到启发,用 JavaScript 编写垃圾邮件过滤器,Greasemonkey 风格,用于我使用的几个容易出现垃圾邮件的网站(尤其是在评论中)。在考虑如何解决这个问题时,我意识到我有几个选择,每个都有优点/缺点。我对这个问题的目标是扩展我创建的这个列表,并希望确定使用 JavaScript 进行客户端垃圾邮件过滤的最佳方法。
至于使垃圾邮件过滤器成为“最佳”的原因,我想说这些是标准:
- 最准确
- 最不容易受到攻击
- 最快的
- 最透明
另外,请注意,我正在尝试使用 Greasemonkey Userscripts 过滤不属于我的网站上已经存在的内容。换句话说,我无法阻止垃圾邮件;我只能过滤它。
到目前为止,这是我的尝试,列出了各种方法以及它们的缺点和优点:
基于规则的过滤器:
它的作用:通过为不同的标准(即全部大写、全部非字母数字等)分配一个点值来“评分”一条消息。根据分数,消息被丢弃或保留。
好处:
- 易于实施
- 大部分是透明的
缺点:
- 透明 - 通常很容易对代码进行逆向工程以发现规则,从而制作不会被拾取的消息
- 难以平衡点值(误报)
- 可能很慢;必须对每条消息执行多个规则,很多时候使用正则表达式
- 在客户端环境中,需要服务器交互或用户交互来更新规则
贝叶斯过滤:
它的作用:分析词频(或三元组频率)并将其与训练过的数据进行比较。
好处:
- 无需制定规则
- 快(相对)
- 逆向工程更难
缺点:
- 需要培训才能有效
- JavaScript 必须仍然可以访问经过训练的数据;通常采用人类可读的 JSON、XML 或平面文件的形式
- 数据集可以变得非常大
- 设计不佳的过滤器很容易与常用词的良好帮助混淆以降低垃圾邮件等级
- 以前没见过的词不能准确分类;有时会导致整个消息的错误分类
- 在客户端环境中,需要服务器交互或用户交互来更新规则
贝叶斯过滤 - 服务器端:
它的作用:通过将每条消息提交到远程服务器进行分析来应用贝叶斯过滤服务器端。
好处:
- 常规贝叶斯过滤的所有好处
- 训练数据不会透露给用户/逆向工程师
缺点:
- 交通繁忙
- 仍然容易受到不常见的词的影响
- 仍然容易添加常用词以减少垃圾邮件
- 服务本身可能被滥用
- 为了训练分类器,可能需要允许用户提交垃圾邮件样本进行训练。攻击者可能滥用此服务
黑名单:
它的作用:将一组标准应用于消息或其某些属性。如果一个或多个(或特定数量的)标准匹配,则邮件被拒绝。很像基于规则的过滤,因此请参阅其描述以获取详细信息。
验证码等:
对于此类应用程序不可行。我正在尝试将这些方法应用于已经存在的站点。Greasemonkey 将用于执行此操作;在有人安装我的脚本之前,我无法在没有验证码的地方开始要求验证码。
谁能帮我填空?谢谢,