繁体   English   中英

ES6导入的安全方面 - 在Meteor的客户端使用

[英]Security aspects of ES6 Import - Using on the client side of Meteor

在官方的流星指南中,它说;

可以信任在服务器上运行的代码。 其他一切:在客户端上运行的代码,通过Method和发布参数发送的数据等都不可信任。

并且;

应用程序中的秘密业务逻辑应位于仅加载到服务器上的代码中。 这意味着它位于应用程序的服务器/目录中,仅包含在服务器上的程序包中,或者位于仅在服务器上加载的程序包内的文件中。

必须在服务器端放置敏感的方法/算法等。 我的第一个问题是,我们如何安全地调用敏感方法让我们在服务器端从客户端说出createUser()

我的第二个问题; 在安全性方面使用Meteor.methodValidated-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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM