【发布时间】:2018-04-09 18:25:05
【问题描述】:
我在我的流星应用程序中发现了一个关于订阅的重要安全错误(可能方法也受此影响)。
尽管我使用check 包和check() 确保在发布中接收到正确的参数数据类型,但我已经意识到,如果用户使用错误的参数数据类型恶意订阅该订阅,它会影响所有使用相同订阅的其他用户,因为当恶意用户使用不正确的参数时,流星服务器没有运行发布。
我怎样才能防止这种情况发生?
使用的包:
aldeed:collection2-core@2.0.1
audit-argument-checks@1.0.7
mdg:validated-method
和 npm
import { check, Match } from 'meteor/check';
服务器端:
Meteor.publish('postersPub', function postersPub(params) {
check(params, {
size: String,
section: String,
});
return Posters.find({
section: params.section,
size: params.size === 'large' ? 'large' : 'small',
}, {
// fields: { ... }
// sort: { ... }
});
});
客户端:
// in the template:
Meteor.subscribe('postersPub', { size: 'large', section: 'movies' });
// Malicious user in the browser console:
Meteor.subscribe('postersPub', { size: undefined, section: '' });
问题:恶意用户订阅正在阻止所有其他用户从他们的postersPub 订阅中获得答案。
额外说明:我还尝试使用try catch 包装检查块和整个出版物,但它不会改变效果。错误从服务器控制台消失,但其他用户继续受到影响,并且没有从恶意用户正在影响的订阅中获取数据。
【问题讨论】:
-
没有看到代码很难说什么,但是为什么您不检查客户端是否发送了正确的数据。此外,如果您的出版物与用户相关,您需要用户
this.userId -
嗨,Maxim,酒吧与用户无关
-
@MaximPokrovskii 我添加了更多代码和解释
-
还值得一提的是,meteor 服务器没有中断,但它确实阻止了从受影响的出版物发送的数据
-
您提到了一个错误,但不要将其包含在您的问题中。该错误是什么以及它如何影响其他用户?您可以随时进一步验证出版物中的论点。