我设置了一个NodeJS服务器并使用Express,在DigitalOcean上托管。我正在Chrome扩展程序中对其进行GET调用。它目前运行良好,但我想收紧以下中间件的安全性:
// Add headers
app.use(function (req, res, next) {
// Website you wish to allow to connect
res.setHeader('Access-Control-Allow-Origin', '*'); //todo: change this
// Request methods you wish to allow
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS, PUT, PATCH, DELETE');
// Request headers you wish to allow
res.setHeader('Access-Control-Allow-Headers', 'X-Requested-With,content-type');
// Set to true if you need the website to include cookies in the requests sent
// to the API (e.g. in case you use sessions)
res.setHeader('Access-Control-Allow-Credentials', true);
// Pass to next layer of middleware
next();
});
问题是,我认为*
中的access-control-allow-origin
让任何人都可以点击我的终点。有没有办法只允许我的Chrome扩展程序拨打电话,而不是其他地方?
提前致谢, 萨姆
答案 0 :(得分:3)
由于您的扩展程序将安装在具有不同IP地址的不同计算机上,因此无法阻止其他计算机访问您的服务器。当然不是Access-Control-Allow-Origin
标题,因为它只适用于浏览器环境和页面上下文,而不是扩展上下文,它由不同的机制控制。任何可以通过HTTP进行通信的应用程序都可以访问您的服务器。您可以做的唯一事情是通过标头发送一些标识信息,然后您可以在服务器上验证请求是从您的扩展发送并处理它。否则,您可以在回复中返回503 Service Unavailable
状态代码。当然,这个解决方案可以解决,它意味着知道你的服务器确实存在并知道它的IP地址,然后知道应该发送的标题和值。