我最近受到启发,使用Greasemonkey风格的JavaScript编写垃圾邮件过滤器,因为我使用的几个网站容易发生垃圾邮件(特别是在评论中)。当考虑我如何去做这件事的选择时,我意识到我有几种选择,每种都有利弊。 我的这个问题的目标是扩展我创建的这个列表,并希望确定使用JavaScript进行客户端垃圾邮件过滤的最佳方式。用JavaScript过滤垃圾邮件的最佳方法是什么?
至于是什么让垃圾邮件过滤器“最好的”,我会说这些都是标准:
- 最准确
- 最容易受到攻击
- 最快
- 最透明的
此外,请注意,我试图过滤内容已经存在于不属于我的网站上,使用Greasemonkey Userscripts。换句话说,我无法防止垃圾邮件;我只能过滤它。
这里是我的尝试,到目前为止,编译的各种方法的列表,包括他们的缺点和优点一起:
基于规则的过滤器:
它做什么:通过为不同的标准指定一个分值(即全部大写,所有非字母数字等)来“评分”一条消息。取决于分数,该消息被丢弃或保留。
优点:
- 容易实现
- 晴透明
缺点:
- Transparent-它通常容易反编译代码到光盘超过规则,从而制造不会被拾取的消息
- 难以平衡点值(误报)
- 可能很慢;多个规则对每个消息使用了很多次正则表达式
- 在客户端侧的环境中执行,服务器交互或用户交互需要更新规则
贝叶斯过滤:
它做什么:分析字频率(或三字母频率),并与它已经被训练的数据进行比较。
优势:
- 无需工艺规程
- 快速(相对)
- 更难反向工程
缺点:
- 需要培训才能生效
- 受过训练的数据仍然必须可供JavaScript访问;通常是在人类可读的JSON,XML或平面文件的形式
- 数据集可以得到相当大的
- 设计糟糕的过滤器是容易的常用单词的好帮助迷惑降低spamacity评级
- 以前没有看过的单词无法准确分类;有时会导致整个消息
- 的不正确分类在一个客户端环境,服务器的交互或用户交互需要更新规则
贝叶斯filtering-服务器端:
什么它的确如下所示:通过将每条消息提交给远程服务器进行分析来应用贝叶斯过滤服务器端。
优点:
- 所有常规贝叶斯过滤的好处
- 培训数据不被泄露给用户/反向工程师
缺点:
- 繁忙的交通
- 仍然容易受到生僻字
- 仍然容易受到添加常用词以降低spamacity
- 服务本身可能被滥用
- 训练分类,它可能需要允许用户提交的垃圾邮件样本为了训练。攻击者可能会滥用这种服务
黑名单:
做些什么:应用了一套标准的消息,或者它的一些属性。如果一个或多个(或特定数量的)标准匹配,则该消息被拒绝。很像基于规则的过滤,所以请参阅其描述以获取详细信息。
CAPTCHA系统,等等:
不适用于这种类型的应用是可行的。我正在尝试将这些方法应用于已经存在的网站。 Greasemonkey将被用来做到这一点;我不能在有人安装我的脚本之前就开始要求CAPTCHA。
任何人都可以帮我填补空白吗?谢谢
那么你的目标是添加垃圾邮件检查人们的浏览器的网站,没有足够的保护内置?您可以动态删除网站上的评论。有趣的是,虽然我不确定有多少网站会从中受益。 – 2010-10-06 00:19:20
真的,我想要做的就是创建一个允许这样做的平台。这是第一位的。然后我将它应用到不同的网站。 Facebook是我的主要目标之一,因为大部分评论都是垃圾邮件。 – 2010-10-06 00:21:31
垃圾邮件过滤器在后端添加是微不足道的。如果该网站的管理员懒得这样做,那么最好不要使用该网站开始。为什么通过为他们的工作奖励一个蹩脚的网站?你提到Facebook很奇怪,因为我从来没有见过垃圾邮件。你可能只想对垃圾邮件发送者不友好...... – Cerin 2010-10-06 12:02:25