col*_*lin 8 denial-of-service infinite-loop meteor ddp
我遇到了客户端无限循环导致Meteor服务器崩溃的情况.无限循环是我将修复的错误,而不是这个问题的主题.我担心的是恶意用户可能会创建自己的无限循环并使Meteor服务器崩溃.
有问题的无限循环是反复调用Meteor.subscribe(...)和Meteor.call(...).看起来这些请求正在服务器上排队到达失能的程度,即使客户的意图是放弃它们.有没有办法告诉服务器该请求已被放弃并将其从队列中删除?
我认为这不会保护服务器免受客户端的影响而无需放弃数千个连续请求,因此如果有人有答案,这个问题将取代这个问题.如何限制单个客户端可以发出的请求数?
在这些APM图表中,您可以看到无限循环如何影响性能.我在大约13:17开始它,并且在13:25应用程序崩溃(由Heroku终止超过其内存配额).

当Meteor.subscribe被调用时,Meteor.publish函数在服务器上执行。因此,您可以在发布功能中决定不提供数据。
这取决于您是否希望用户登录或不提供数据。如果您希望用户登录,则可以创建一个集合,使用所使用的 userID 注册对发布函数的任何调用(即任何客户端订阅请求)。每当登录用户尝试订阅时,您都会询问此集合,并检查该用户最近是否发出了多个请求。如果该客户端达到了您定义的请求配额,您只需返回 null 即可。
您可以使用https://github.com/gadicc/meteor-headers包并注册 IP 地址,对未登录的用户执行相同的操作。
您可以在客户端重复调用的服务器方法中执行相同的操作meteor.call()。
我认为检查这个数据库(数据库会保持很小,因为只有最近的连接必须保存在数据库中)并决定是否提供数据将比每次提供数据所花费的时间更少。
我希望这有帮助。
| 归档时间: |
|
| 查看次数: |
436 次 |
| 最近记录: |