[英]Security aspects of ES6 Import - Using on the client side of Meteor
在官方的流星指南中,它说;
可以信任在服务器上运行的代码。 其他一切:在客户端上运行的代码,通过Method和发布参数发送的数据等都不可信任。
并且;
应用程序中的秘密业务逻辑应位于仅加载到服务器上的代码中。 这意味着它位于应用程序的服务器/目录中,仅包含在服务器上的程序包中,或者位于仅在服务器上加载的程序包内的文件中。
必须在服务器端放置敏感的方法/算法等。 我的第一个问题是,我们如何安全地调用敏感方法让我们在服务器端从客户端说出createUser() ?
我的第二个问题; 在安全性方面使用Meteor.method和Validated-Method有什么区别吗? 调用标准Meteor方法时我们不需要使用import语句,但如果我们调用Validated-Method,我们需要导入它。 对于相同的createUser()示例,最好在Meteor方法中定义它以提高安全性?
在官方的流星指南中,它说;
流星指南想要说的是:
Meteor是一个完整的堆栈框架,许多产品需求的解决方案可以通过多种方式完成(在服务器和客户端中分配代码)。 假设您想在每次购买商品时向客户收取20%的费用。
解决方案1:在客户端收取20%的费用
Template.yourTemplate.events({
// ... other events
'click .buyme': function(event, template) {
// Suppose you have product id in element's id attr
let productId = event.target.id,
product = Products.findOne({_id: productId}),
charge = Math.ceil(product.price * 0.2);
// Add a order
Order.insert({
charge,
productId,
userId: Meteor.userId()
})
},
// ... other events
})
解决方案1:在服务器上充电20%
Meteor.methods({
// ... other methods
'order': function(productId) {
// Suppose you have product id in element's id attr
let product = Products.findOne({_id: productId}),
charge = Math.ceil(product.price * 0.2);
// Add a order
Order.insert({
charge,
productId,
userId: Meteor.userId()
})
},
// ... other methods
})
从服务器调用方法。
你现在必须清楚我们不能相信解决方案1,对吗?
在安全性方面使用Meteor.method和Validated-Method有什么区别吗?
不,当然不。 请参阅https://github.com/meteor/validated-method以了解有关验证方法的更多信息。 您将看到两者之间的主要区别是Metor.Methods
依赖于魔术字符串来访问方法,但另一方面validated-method
提供了一个用于访问该方法的对象。 而且,这就是我们需要导入而不仅仅是Method.call()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.