下面是一些代码(具有相关联的数据),用于计数东西流星应用的本质。计数可以连接在一起,这样一是可以增加另:流星 - 检测无限循环
// The counting and linking code.
Meteor.methods({
'counts.increment'(countId) {
const count = Counts.findOne(countId);
Counts.update(countId,{ $inc: { count: 1 } })
Meteor.call('counts.check-links',count._id);
},
'counts.check-links'(countId){
var count = Counts.findOne(countId);
count.links.forEach(function (linkId) {
updated = false;
const link = Links.findOne(linkId);
const primary = Counts.findOne(link.primary);
const secondary = Counts.findOne(link.secondary);
if (primary.count == link.level) {
updated = true;
Counts.update(secondary._id, {$inc: {count: 1}});
}
if (updated) {
Meteor.call('counts.check-links',secondary._id);
}
})
}
})
// Some data...
Count: {
_id: 1,
value: 0,
name: A,
links: [3]
}
Count: {
_id: 2,
value: 0,
name: B,
links: [4]
}
Link: {
_id: 3,
primary: 1,
secondary: 2
}
Link: {
_id: 4,
primary: 2,
secondary: 1
}
所以,每个计数链接到其他如果Meteor.call('projects.increment',1)
称为该代码会崩溃。检测这样的设置可以是相当困难的,因为有可能是计数的非常复杂的安排和链接也可以减少,置零,操作每隔N计数&℃。 & c。不过,为了提出这个问题并不重要。我认为
一种可能性是添加内counts.check-links
一个计数器,该计数器将环路的任意数量后停止执行,例如5.假定为防止篡改,这个计数器的值必须存储在数据库中并通过Meteor方法执行。它将需要在任何check-links
调用序列结束时重置。
我不知道这是否是最好的办法,或者如果这样怎么可能是一个很好的方式来实现它,所以我很想知道,如果任何人有任何建议。
确保验证您的服务器方法或其超级假冒此方法调用或做一些nosql注入。 – Dude
服务器只将数据发布属于已登录的用户,并且该方法调用也检查正在对数据执行的操作的登录用户拥有,因此应该有希望覆盖它。 – knirirr
我应该补充说,在实际的应用程序中还有一个Meteor.method参数的检查 - 我从这里的例子中省略了这种事情。 – knirirr