如何防止非浏览器客户端将请求发送到我的服务器

时间:2018-12-15 20:17:55

标签: node.js reactjs express

我最近使用nginx在同一个vps上部署了网站和后端,但是现在当我向PostMan提出http://IP:port/route请求时-我从任何PC上从服务器获得响应。 我认为这不是它应该如何工作的。我将CORS选项设置为origin:vps-IP(因此只有我的域),但是我的服务器仍然接受来自PostMan的请求。有什么方法可以防止我的后端接受这些请求,从而将域限制为仅将我的域又称为我的vps ip?请求必须先绕过nginx吗?

另一个问题是保护我的网站;重要的请求和响应标头显示在浏览器的“网络”标签中-如“授权JWT令牌”,这是正常现象还是这存在一定的安全风险?

2 个答案:

答案 0 :(得分:3)

我认为这里对CORS有点困惑。

Cross Origin Resource Sharing不适用于桌面客户端到服务器或服务器到服务器的调用。从链接:

  

跨源资源共享(CORS)是一种使用   额外的HTTP标头,告诉浏览器允许Web应用程序   在一个来源(域)运行的用户有权访问选定的内容   来自不同来源的服务器的资源。 Web应用程序使   跨域HTTP请求,当它请求具有以下内容的资源时:   来源(域,协议和端口)与其来源不同。

所以这是另一个服务器的Web应用程序,它的实际功能由浏览器实现。

  1. 这正常吗? 是的。这意味着使用Postman的人员可以向您的服务器发出请求,并且您有责任确保自己免受此类攻击。浏览器会做的是,他们将查看允许您从中调用服务器的域,如果该域是尝试访问资源的其他域,则它们将阻止该服务器。 设置可访问您资源的域列​​表是您/服务器的责任,但强制执行该策略是浏览器的责任。 Postman不是浏览器,因此不一定实现此功能(并且不必)。

  2. 如果要在标头中显示/泄漏令牌(在与您进行身份验证或登录之前不同的设备中)-这是一个严重的安全问题。如果它是在您登录的设备上发生的,并且仅在登录后才发生,则可以预期。这是假设您没有以其他任何方式泄漏信息并正确设计/实现了信息。

  3. 有一些您担心的预防机制。而且您可能在没有注意到的情况下使用这样的服务,您的托管/云部署提供商可能与另一家公司/工具达成了实施或协议,因此您可能已经受到保护。最好检查一下!

这些

是最早出现在快速搜索中的付费服务,我敢肯定还有更多。还有一些简单的实现将提供一些保护:

答案 1 :(得分:0)

Nodejs-Express CORS:

npm i --save cors,然后根据您的用例选择requireimport

  

启用服务器到服务器和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

查看完整的文档