我最近发现一个巨大的安全问题,我PM系统,允许用户发送消息多,因为他们想要在地址栏中for循环。有人把这种到地址栏:

javascript:for(x=0;x<10000;x++){ $('#compose form').submit(); }

和邮件发送1000次,我和我的收件箱充满了同样的信息和我的数据库是如此充满了数据库数据库是非常laggy。

我的问题是,我怎么能避免这种情况?这是一个主要的问题。

另外,在提交表单与AJAX。

修改

我使用PHP,所以我怎么能避免这种情况?怎么样,我可以让它到的消息只能每5分钟发送或如此,如果他们提交一个以上的5分钟之内就会显示错误(或不显示任何用户反馈的一切,并提交只是阻止它)?

有帮助吗?

解决方案

有是修复它一个明显的方式和问题不在于在客户端 - 的它位于在服务器侧

服务器脚本不应该允许发送消息过于频繁 - 如。往往比,说,一次,每次10分钟。要做到这一点,当用户发送的电子邮件,你可以使用会话机制在服务器端和保存信息。如果用户没有发送了一封电子邮件,你也应该保存在会话信息 - 来区分人的会议从会议的人禁用启用(你应该从所有发送邮件阻止后者)

在会话的方式应实施(具体代码)取决于您使用的服务器端脚本语言(PHP,Python和JSP等)。

其他提示

如果有人有知识,这样对你,你可能做不到在客户端什么,所以我会说的唯一选择就是你登录或保持计数等请求数的(也许是为了一个特定的资源),并拒绝该请求(或发送一个“忙”的HTTP代码等)用于特定用户。

我觉得最简单的方法是计算从一个特定的IP地址的请求(这显然有一些缺点,如在代理或NAT等多个用户)。

实际的解决方案将取决于你的服务器端语言和Web服务器,但你也许可以架起一条规则,看看它是如何工作的。像每分钟5个请求每个IP地址(或任何适合于您的使用情况)。

正如其他人所说,你要在服务器上实现保护。客户机侧的未编码量将提供保护。

保护服务器针对这种类型的滥用的常见的方式被称为rate limiting。你决定要多久给定的客户端能够提交一个消息,你的代码服务器忽略落在之外的任何消息限制。

例如,可以决定,你将允许不超过一分钟一个消息,并且不超过每10分钟和小时不超过四个消息的两个消息。你选择任何你觉得似乎是合理的,你的代码到该算法。

在你的服务器上,你必须能够识别该消息是从(最有可能通过一个身份验证Cookie),并在你的数据库来哪一个用户,你必须要能够找出最后消息时由该用户发送。你甚至可以缓存在服务器中的RAM的信息(取决于如何您的服务器的工作原理),以避免在每次请求数据库查找,因为你只需要保持最近的信息,你只需要对累犯性能优化(那些试图滥用您的服务器,因此刚刚发送的请求的那些)。

我同意大家都在发布有关限速。

然而,这可以是非常复杂的,在服务器端实现。尤其是当你开始向外扩展。而且,说实话,如果1000级的消息伤害了你那么坏 - 我的建议可能适用于您更是如此。

无需实现这个自己的,你可能想寻找到一个第三方服务来为你做它,像这样的超爽Web服务代理的 Apigee

他们的一个特征是,具体而言,API速率调节。 (参见链接)

“在这里输入的图像描述”

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top