使用CORS保护API

时间:2018-10-06 15:43:39

标签: javascript node.js api express cors

我想使用CORS保护我的API。我希望我的API仅具有来自所选域的呼叫访问权限。

我正在使用node.js进行表达,因此我将其添加到我的项目中:https://github.com/expressjs/cors

和示例代码:

var express = require('express')
var cors = require('cors')
var app = express()

var corsOptions = {
  origin: 'http://example.com',
  optionsSuccessStatus: 200
}

app.get('/test', cors(corsOptions), function (req, res, next) {
  res.json({msg: 'This is CORS-enabled for only example.com.'})
})

但是,如果我通过POSTMAN从本地主机发出请求,我仍然会从该路由中获得响应。应该将其阻止,并且仅适用于来自一个域(example.com)的请求。

我之前尝试过:

router.get('/test', cors(corsOptions), function(req, res, next) {
  console.log(corsOptions);
  res.header("Access-Control-Allow-Origin", "http://www.example.com);
  res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  res.status(200).send({ work: true });
});

但这也使我从POSTMAN发出的请求...

我希望有一个仅在我的example.com页面上并且有JavaScript发送的请求时才能引用的API。

1 个答案:

答案 0 :(得分:2)

CORs仅在浏览器中有效,因此不会对来自Postman的浏览器外部的请求产生任何影响。这是一项需要客户端自己实施CORs保护的技术。

除非实现了某种身份验证或基于时间的令牌,否则无法阻止POSTMAN或任何其他程序访问使用您的API。这是基于Web的API的本质。如果可以在您的网页中使用它们,那么其他任何人也可以通过编程方式使用它们。

COR的目的是防止其他网页使用其自己的网页Javascript中的API。这就是它所保护的全部。实际上,如果另一个网站希望从其服务器访问您的API,然后将结果放入自己的网页中,则他们可以做到这一点-COR完全不限制浏览器外部的服务器或编程访问。

有关保护API常规主题的进一步讨论,请参见以下参考文献:

Securing Express API

How to publish jQuery code accessing a REST api, but have it secured from unauthorized use

Setup API that only your webserver can see it

jQuery ajax security