javascript - 使用 CORS 保护 API

标签 javascript node.js api express cors

我想使用 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 });
});

但这也让我的 POSTMAN 请求...

我希望有一个 API,只有在访问我的 example.com 页面并且 JavaScript 发送请求时才能引用该 API。

最佳答案

COR 仅适用于浏览器,因此它不会对浏览器外部(例如 Postman)发出的请求产生任何影响。这是一项需要客户端自己实现COR保护的技术。

除非您实现某种身份验证或基于时间的 token ,否则无法阻止 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

关于javascript - 使用 CORS 保护 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52680723/

相关文章:

javascript - 如何使用 Jest 模拟子第三方属性中的构造函数

javascript - 实现倒计时器的重置按钮

api - Force.com API 会计日期文字的时区?

javascript - v-for 通过 vue.js 中的对象

javascript - 在 Javascript 中播放伴随随机图像的声音

node.js - 将 oracle 数据库与 Node 连接时出错

javascript - ; [HPM] 尝试代理请求时发生错误

node.js - 告诉 nginx 使用反向代理从 Node 应用程序内发送文件

java - 下载已通过 Liferay 门户中的动态数据列表上传的文件

javascript - 我正在尝试将 header 中的 HTTP_X_FORWARDED_FOR 传递给 php 服务器,但未在服务器中获取其值