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