【问题标题】:Protect API with CORS [duplicate]使用 CORS 保护 API [重复]
【发布时间】:2019-03-11 20:28:15
【问题描述】:

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

我正在使用 node.js 和 express,所以我添加到我的项目中: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 });
});

但这也让我的邮递员请求...

我希望有一个 API,只有在我的 example.com 页面和 JavaScript 发送的请求时才能引用它。

【问题讨论】:

  • 我认为您误解了 CORS 的工作原理。它由浏览器而不是服务器强制执行。有关更多信息,请查看答案here

标签: javascript node.js api express cors


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-06-04
    • 2022-01-17
    • 2022-11-24
    • 2023-03-02
    • 2016-09-24
    • 2015-01-31
    • 1970-01-01
    • 2014-08-13
    • 1970-01-01
    相关资源
    最近更新 更多