防洪,检查过去的消息与最新消息的比较与%相同

时间:2011-06-13 20:20:37

标签: c# winforms .net-3.5 spam-prevention

我正在为聊天系统进行洪水控制,其中一个想法是根据成员在X分钟内发送的最新消息来检查过去消息的平等程度。

因此,如果会员的最新消息是在5分钟的过去消息中发送的,那么它将检查过去消息与他发送的最新消息的平等程度,如果达到80%或更高,他将无法通话一会儿。

问题是我不知道这种算法会是什么样子,我不确定它是否是一种有效的方法......

让我们去看看事实,用户发送:

[00:00:01] MemberX: Hi everyone !
[00:00:02] MemberX: Hi everyone ! MUAH
[00:00:03] MemberX: Hi everyone ! 1

因此,在上述情况下,用户可以在X分钟内删除其谈话访问权限。

我想我可以校验一条消息,该消息适用于顺序消息,例如最后添加文本的消息。

我如何计算比赛的百分比?

过去消息的字节长度是否与匹配的最新消息的字节长度有关?

示例:

  • 过去的消息10个字节
  • 最新消息14字节
  • 校验和最多匹配9个字节:(9/10)*100 = 90%

现在让我们更加努力:

[00:00:01] MemberX: Hi hey everyone !
[00:00:02] MemberX: Hi everyone ! MUAH
[00:00:03] MemberX: Hi 123 everyone !

在第二种情况下,我相信校验和会失败并且根本不可用。

有没有一个很好的算法来捕捉这样的洪水?我不想抓住它的100%,但至少要有一小部分才能使房间清洁。

它的第一部分适用于很多滥用者,但是一些聪明的人会想到第二种方式可能还有很多其他的方法,这只是我可以实现的事情的初步想法。

我不想限制所有用户使用洪水时间限制,因为大多数用户输入速度很快。我只想抓住人们在很短的时间内一遍又一遍地发送可重复的文本。

所以我的问题是如何克服这种泛滥的好算法?

2 个答案:

答案 0 :(得分:1)

许多IRC服务器使用"Leaky Bucket" approach来限制用户的固定费率。它们跟踪用户最后发送的消息之间的增量时间,并使用它来计算“速率”。这通常实现为要发送的每个用户的消息队列。如果用户超过他们被限制的费率,除非他们超过了给定数额的费率,此时他们将被禁止。

IRC的另一种常见方法是简单地跟踪最后N条消息,并且如果超出一定的可重复性阈值(即反复使用同一条消息)以启动/禁止用户。

答案 1 :(得分:0)

我可能会调查http://en.wikipedia.org/wiki/Levenshtein_distance,然后将收到的字符串中的所有字词与旧字词的分数合并。

只有立即想到的东西。