启用 CORS 的服务器不拒绝请求
Posted
技术标签:
【中文标题】启用 CORS 的服务器不拒绝请求【英文标题】:CORS-enabled server not denying requests 【发布时间】:2017-12-17 14:10:22 【问题描述】:我正在尝试将 express Cors 与我的 resitfy 服务器一起使用,它似乎并没有拒绝来自其他 ips 的请求。我在本地工作,所以我尝试将来源设置为随机公共 ip,但我的所有请求仍在通过
这是我的路线:
module.exports = function(app)
var user = require('./controllers/userController');
var cors = require('cors');
var corsOptions = require('./cors.json');
app.post('/auth/signup', cors(corsOptions),user.createUser);
app.post('/auth/login', cors(corsOptions), user.validateUser);
app.post('/auth/generateKeys', cors(corsOptions), user.generateKeys);
app.post('/auth/generateToken', user.generateToken);
;
这是我设置了随机 ip 的 cors.json 文件:
"origin": "http://172.16.12.123",
"optionsSuccessStatus": 200,
在路线上设置了 cors 后,我可以在邮递员中看到以下内容,但请求仍在处理中?我希望得到拒绝访问的响应。
访问控制允许来源→http://172.16.12.123
【问题讨论】:
【参考方案1】:CORS 不会阻止任何人向您的应用程序或公开的 API URL 发送 GET 或 POST 请求。
相反,它向 Web 浏览器指示允许 AJAX 请求从执行的域发送到此服务器。
但只有从域执行的 AJAX 请求是受 CORS 控制的。在网络浏览器中输入 URL 不会激活 CORS:它不是防火墙。
https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS
事件顺序为:
域 A 在用户浏览器上执行 AJAX 以请求域 B 上的 API URL
用户的浏览器向目标域 B 发送基本主请求,并检查域 A 是否允许 CORS
如果允许,则执行 AJAX 请求,否则返回 null
【讨论】:
好的,我正在使用 restify 构建一个 API,我希望用户能够发布一些端点,但其中很多我没有。我正在尝试找到控制它的最佳方法。我最初在主体中使用我的主应用程序和 api 都知道的 API 密钥。这是正确的做法吗? 您的用户必须打开与您的后端服务的会话,然后返回会话令牌。他们在他们执行的所有帖子中使用此会话令牌,并且您的后端服务器控制所有特权操作的会话有效性。通过这种方式,您可以首先通过身份验证来管理谁可以发帖或不可以发帖。不要忘记 SSL 并使用标准会话 ID 生成。 我正在尝试构建一个没有后端的应用程序,其中所有数据都是通过 ajax 提取的。我将使用存储在本地存储中的令牌进行调用【参考方案2】:CORS 配置本身不会导致服务器拒绝请求。您不能仅通过 CORS 配置导致服务器端的请求阻塞。
当您使用 CORS 支持配置服务器时,唯一的不同之处在于发送 Access-Control-Allow-Origin
响应标头和其他 CORS 响应标头。就是这样。
跨域限制的实际执行仅由浏览器完成,而不是由服务器完成。
因此,无论您对服务器进行何种服务器端 CORS 配置,服务器仍会继续接受来自所有客户端和来源的请求,否则它会;换句话说,来自所有来源的所有客户端仍然会继续从服务器获取响应,就像它们在其他情况下一样。
但是浏览器只会将来自跨域请求的响应暴露给在特定来源运行的前端 javascript 代码,前提是请求被发送到的服务器通过使用 @ 响应来选择允许请求987654322@ 允许该来源的标头。
这是您使用 CORS 配置唯一可以做的事情。您不能仅通过执行任何服务器端 CORS 配置来使服务器仅接受和响应来自特定来源的请求。为此,您需要使用除 CORS 配置之外的其他内容。
【讨论】:
好的,我正在使用 restify 构建一个 API,我希望用户能够发布一些端点,但其中很多我没有。我正在尝试找到控制它的最佳方法。我最初在主体中使用我的主应用程序和 api 都知道的 API 密钥。这是正确的做法吗? 是的,以您描述的方式使用 API 密钥听起来是实现您想要的合理方式以上是关于启用 CORS 的服务器不拒绝请求的主要内容,如果未能解决你的问题,请参考以下文章
如果 CORS 拒绝我的 API 请求并且我不控制服务器,我无能为力吗? [复制]
带有自定义标头的 Ajax 请求发送到启用 CORS 的 Web API 服务器