halo icon indicating copy to clipboard operation
halo copied to clipboard

对评论进行限制

Open JohnNiang opened this issue 4 years ago • 10 comments

概述

近期 Haloer 收到大量的垃圾评论,希望能够出现一种策略保护 Halo,限制攻击者。

动机

https://bbs.halo.run/d/1059-halo

详细解释

  • 对评论次数进行限制
  • 对评论者 IP 进行限制

JohnNiang avatar Dec 07 '20 02:12 JohnNiang

目前不是已经有 IP 限制了吗??当恶意用户使用代理池、肉鸡进行攻击时,IP 限制应该是无效的。对于 User-Agent 也可以进行伪造。。感觉合适的方式就是接口次数过多以后执行验证码,但这样必定会影响到所有的主题。。

LIlGG avatar Dec 07 '20 02:12 LIlGG

不知道能不能实现,登录后评论的这种方式。。 即用户需要登录后台才可以进行评论,这样就可以有效限制垃圾评论。

LIlGG avatar Dec 07 '20 02:12 LIlGG

目前不是已经有 IP 限制了吗??当恶意用户使用代理池、肉鸡进行攻击时,IP 限制应该是无效的。对于 User-Agent 也可以进行伪造。。感觉合适的方式就是接口次数过多以后执行验证码,但这样必定会影响到所有的主题。。

  • 目前还无法拉黑 IP 地址或者 CIDR 地址;
  • 验证码模式倒是可以考虑,不然现在就是在裸奔,但确实会影响到所有评论插件。

JohnNiang avatar Dec 07 '20 02:12 JohnNiang

目前不是已经有 IP 限制了吗??当恶意用户使用代理池、肉鸡进行攻击时,IP 限制应该是无效的。对于 User-Agent 也可以进行伪造。。感觉合适的方式就是接口次数过多以后执行验证码,但这样必定会影响到所有的主题。。

  • 目前还无法拉黑 IP 地址或者 CIDR 地址;
  • 验证码模式倒是可以考虑,不然现在就是在裸奔,但确实会影响到所有评论插件。

嗯嗯 了解了。 果然还是很期待这些安全方面的问题解决方案的。哈哈

LIlGG avatar Dec 07 '20 02:12 LIlGG

个人感觉可以考虑以下几种方案:

  1. 考虑到垃圾评论通常带有外部链接,可以引入「将所有包含链接/疑似包含链接的评论预先设为“等待审核”」这一选项。具体实现方法可在传入评论后检测是否含有链接以及是否选定此选项,存库时附加一status字段;管理员可被邮件提醒或自行登录后台,审核相关评论后自行放行
  2. 垃圾评论通常完全/几乎完全重复之前内容。可以引入重复内容匹配机制,例如最为粗暴的方式就是直接在数据库内完全匹配评论内容,如果发现完全匹配就直接拒绝;但是弊端就是例如「很棒!」这样的词汇可能也会误杀,所以可能需要引入匹配的先决条件(例如当评论长度为20以上才进行这种匹配等)
  3. 垃圾评论通常是一种固定逻辑的bot向多个站点频繁发送垃圾信息,那么根据隔壁 Wordpress 的 Jetpack 的思路,可以维护一个中心化的评论反垃圾系统,在所有halo站点突然暴增评论的情况下可以断言是受到了大规模的垃圾评论发送,使得各个站点反垃圾可以参考halo网络中其他站点的数据,但是这种系统可能对一些注重隐私的博主十分冒犯(需要发送评论内容 (但是hash评论或者,将评论按照句子分词后发送hash可能也是一种去隐私的方法)、IP、姓名等信息到中心化服务器)、中心服务器容易受到攻击(外部的报复性攻击、甚至网络内部因为程序缺陷造成的内部攻击等)、以及难于管理(大批量的评论内容,甚至可能涉及敏感内容,服务器位置、维护可行性难以考量与维持)、甚至维护人员的安全乃至项目的安全性可能也会受到影响。然而同时也是相对最为“聪明”的一种方案... 可能需要权衡利弊

当然,如果是只hash一下评论内容/将评论内容去敏(这里个人隐私去敏以及法律合规性去敏感的意思都有),可能还是比较可行的,只是这种服务我觉得如果单纯作为公益项目会很难维持,然而另一方面收费感觉也不会有太多用户会为了反评论垃圾而付费(看来隔壁Jetpack加了个分析功能估计也是因为这个hhh)

只是个人的一点小想法,错误之处还请指点☆´∀`☆

GalvinGao avatar Jan 02 '21 14:01 GalvinGao

@GalvinGao 可以参考一下 Spring Cloud Gateway 的思路来设计过滤器,我们尽可能多地提供过滤器实现,规则由使用者自定义即可。

JohnNiang avatar Jan 02 '21 15:01 JohnNiang

@GalvinGao 可以参考一下 Spring Cloud Gateway 的思路来设计过滤器,我们尽可能多地提供过滤器实现,规则由使用者自定义即可。

我觉得这个挺不错~ 但是感觉在自定义之前应该也预设几个规则(前端预设几个应该就可以),这样不会让新用户看到太多参数/规则可以设置而感到困惑这样。此外,感觉应该默认设置一个高宽容度的一套过滤器,比如限制同IP一小时最多100条(可能已经很多了)、整个站点每小时评论数不应超过 整个站点上一小时的真人浏览post总数*1.5 之类的。

GalvinGao avatar Jan 02 '21 23:01 GalvinGao

加验证码评论还是比较不错的

lnsane avatar Apr 03 '21 06:04 lnsane

加验证码应该是最简单行之有效的

Steuart avatar Aug 20 '21 15:08 Steuart

我觉得可以用redis做限流,把用户ip当key,key设置过期时间,把一段时间之间的访问次数作为value,当这个ip访问次数到达限制,就是当value达到比如10,key还没过期,就限制该ip不能再访问。

loongzcode avatar Apr 11 '22 14:04 loongzcode

在 Halo 2.7,已经实现了根据 IP 地址限制评论的功能。

参考:

  • https://github.com/halo-dev/halo/pull/4084

当前 Issue 即将被关闭。如果有任何问题可随时重新打开。

/close

JohnNiang avatar Oct 12 '23 02:10 JohnNiang

@JohnNiang: Closing this issue.

In response to this:

在 Halo 2.7,已经实现了评论限制功能。

参考:

  • https://github.com/halo-dev/halo/pull/4084

当前 Issue 即将被关闭。如果有任何问题可随时重新打开。

/close

Instructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository.

f2c-ci-robot[bot] avatar Oct 12 '23 02:10 f2c-ci-robot[bot]