如何确保对我的服务器的请求仅通过单一来源/用户界面起作用?
Posted
技术标签:
【中文标题】如何确保对我的服务器的请求仅通过单一来源/用户界面起作用?【英文标题】:How to ensure requests to my servers functions only by a single origin / UI? 【发布时间】:2019-10-12 20:37:06 【问题描述】:我有一个 node.js 服务器,它对我的 mongoDB 具有 HTTP CRUD 功能。
还有一个通过这些函数发送请求的 android 应用程序。
我想确保我的服务器能够响应来自特定来源的请求。
例如:只回答来自安卓应用的请求,或者我的电脑邮递员的请求。
如何确保没有其他人使用相同的 url 和端口发送请求会得到答复?
这是我的 server.js 文件:
const express = require('express');
const MongoClient = require('mongodb');
const bodyParser = require('body-parser');
var db = require('./config/db');
var app = express();
const port = 8000;
app.use(bodyParser.json());
MongoClient.connect(db.url, (err, database) =>
if (err) return console.log(err)
db = database.db("getremp")
require('./app/routes')(app, db);
app.listen(process.env.PORT || port, () =>
console.log("Express server listening on port %d in %s mode - We Are lIVE!",app.settings.env.port, app.settings.env);
);
)
还有我的 index.js:
const noteRoutes = require('./note_routes');
module.exports = function (app, db)
noteRoutes(app, db);
;
【问题讨论】:
【参考方案1】:您可以通过以下方式进行控制:
发送包含密钥的特定标头,然后在您的节点应用程序中控制标头How to check headers in nodejs?
使用 HMAC 来验证用户并控制数据的完整性:Node Hmac Authentication
但您必须记住,从移动应用程序发出的所有流量都可以被拦截(例如使用 Fiddler)。切勿使用静态(非动态)值来确保身份验证
【讨论】:
我需要更改服务器上的每个函数和应用程序上的每个函数来检查/发送标头吗? 带有标题,您只需要在您的快速应用程序中注册一个新的中间件,在您的应用程序中,您需要在每次调用您的 api 时添加一个标题 我真的不明白我可以在哪里以及如何在服务器端使用它一次..通过您发送的示例,我可以看到它使用 req.headers ...您可以进入api函数.. 对不起.. 我还在学习 Node.js.. 我已经看到我可以使用这些功能添加一个中间件。就像在这里看到的:***.com/questions/46094417/… 非常感谢!以上是关于如何确保对我的服务器的请求仅通过单一来源/用户界面起作用?的主要内容,如果未能解决你的问题,请参考以下文章