我最近使用nginx在同一个vps上部署了网站和后端,但是现在当我向PostMan提出http://IP:port/route请求时-我从任何PC上从服务器获得响应。 我认为这不是它应该如何工作的。我将CORS选项设置为origin:vps-IP(因此只有我的域),但是我的服务器仍然接受来自PostMan的请求。有什么方法可以防止我的后端接受这些请求,从而将域限制为仅将我的域又称为我的vps ip?请求必须先绕过nginx吗?
另一个问题是保护我的网站;重要的请求和响应标头显示在浏览器的“网络”标签中-如“授权JWT令牌”,这是正常现象还是这存在一定的安全风险?
答案 0 :(得分:3)
我认为这里对CORS有点困惑。
Cross Origin Resource Sharing不适用于桌面客户端到服务器或服务器到服务器的调用。从链接:
跨源资源共享(CORS)是一种使用 额外的HTTP标头,告诉浏览器允许Web应用程序 在一个来源(域)运行的用户有权访问选定的内容 来自不同来源的服务器的资源。 Web应用程序使 跨域HTTP请求,当它请求具有以下内容的资源时: 来源(域,协议和端口)与其来源不同。
所以这是另一个服务器的Web应用程序,它的实际功能由浏览器实现。
这正常吗? 是的。这意味着使用Postman的人员可以向您的服务器发出请求,并且您有责任确保自己免受此类攻击。浏览器会做的是,他们将查看允许您从中调用服务器的域,如果该域是尝试访问资源的其他域,则它们将阻止该服务器。 设置可访问您资源的域列表是您/服务器的责任,但强制执行该策略是浏览器的责任。 Postman不是浏览器,因此不一定实现此功能(并且不必)。
如果要在标头中显示/泄漏令牌(在与您进行身份验证或登录之前不同的设备中)-这是一个严重的安全问题。如果它是在您登录的设备上发生的,并且仅在登录后才发生,则可以预期。这是假设您没有以其他任何方式泄漏信息并正确设计/实现了信息。
有一些您担心的预防机制。而且您可能在没有注意到的情况下使用这样的服务,您的托管/云部署提供商可能与另一家公司/工具达成了实施或协议,因此您可能已经受到保护。最好检查一下!
这些
是最早出现在快速搜索中的付费服务,我敢肯定还有更多。还有一些简单的实现将提供一些保护:
答案 1 :(得分:0)
npm i --save cors
,然后根据您的用例选择require
或import
。
要启用服务器到服务器和REST工具(如Postman)以访问我们的API-
var whitelist = ['http://example.com']
var corsOptions = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1 || !origin) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions));
要禁用服务器对服务器和REST工具(如Postman)以访问我们的API,请从if语句中删除
!origin
。
var whitelist = ['http://example.com']
var corsOptions = {
origin: function (origin, callback) {
if (whitelist.indexOf(origin) !== -1) {
callback(null, true)
} else {
callback(new Error('Not allowed by CORS'))
}
}
}
app.use(cors(corsOptions));
这真的很容易实现,express cors模块有很多选项。在此处https://expressjs.com/en/resources/middleware/cors.html
查看完整的文档