gpt4 book ai didi

javascript - meteor :如何防止客户端访问方法

转载 作者:可可西里 更新时间:2023-11-01 09:56:48 25 4
gpt4 key购买 nike

所有 meteor 方法都可以从客户端和服务器端以相同的方式调用。

假设用户知道或可以预测服务器上的所有方法名称,然后他可以调用它们并根据需要使用它的结果。

例子:跨域http请求返回response的方法调用海量数据Meteor.call(httpLoad, "google.com");或者加载数据的方法可以使服务器过载如果客户端知道文档 _id Meteor.call(getUserData, "_jh9d3nd9sn3js");

那么,如何避免这种情况,可能有比 Meteor.methods({...}) 更好的方法来存储仅服务器功能?

最佳答案

Meteor 方法被设计为从客户端访问,如果你不想这样,你只需要在服务器上定义一个普通的 javascript 函数。一个非常基本的例子是:

server/server.js:

someFunction = function(params) {
console.log('hello');
}

只要它在服务器文件夹中,就无法从客户端访问该函数。


对于 coffeescript 用户,每个文件在技术上都是一个单独的范围,因此您必须使用 @ 定义一个全局变量,例如

@someFunction = (params) ->
console.log 'hello'

或者如果你想将函数的范围限制在一个包中:

share.someFunction = (params) ->
console.log 'hello'

如果您有需要从客户端访问但仅供管理员用户访问的方法,则需要在 meteor 方法定义的开头添加这些检查:

Meteor.methods({
'someMethod': function(params) {
var user = Meteor.user();
if (user && (user.isAdmin === true)) {
// Do something
} else {
throw new Meteor.Error(403, 'Forbidden');
}
}
});

我不打算保证此示例的安全性 - 这只是一个示例 - 但希望它能让您了解如何保护您的方法。

编辑:注意到其他答案提到使用 if (Meteor.isServer) { ... } 条件。请注意,如果您在客户端也可访问的内部方法中执行此操作,则用户仍然可以看到您的服务器代码,即使他们无法运行它。这对您来说可能是也可能不是安全问题 - 如果您在可以从客户端访问其代码的方法中硬编码任何第 3 方 API 凭据或任何类型的敏感数据,基本上要小心。如果你不需要客户端的方法,最好只使用普通的 JS 函数。如果您用 isServer 条件包装整个 Meteor.methods 调用,代码将只在服务器上,但仍然可以从客户端调用。

关于javascript - meteor :如何防止客户端访问方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32266548/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com