搞懂 API,跨域资源贡献 (CORS )和安全性问题

协程流沙
• 阅读 642

在 Web 应用开发中,API 是应用程序和其他系统之间进行数据交互的主要方式。

跨域资源共享(CORS)是一种常见的处理跨域请求的技术,但同时也带来了一些安全性问题。我将分享 CORS 技术及其安全性问题。

跨域资源共享(CORS)

CORS 是指在浏览器端实现的机制,允许 Web 应用程序或 API 向不同的域名提供服务。当浏览器发起跨域请求时,服务器可以在响应中添加特定的头信息,告知浏览器该请求是否被允许。下面是一个简单的 CORS 响应头:

Access-Control-Allow-Origin: https://example.com

这条响应头中的 https://example.com 表示只允许来自 https://example.com 的请求访问当前 API。如果没有配置这个头信息,浏览器会阻止跨域请求,且无法获取 API 的返回结果。

虽然 CORS 技术方便了 API 的跨域访问,但同时也带来了一些潜在的网络安全风险。

CORS 安全性问题

1. CSRF 攻击(跨站请求伪造)

CSRF 攻击通常是针对需要登录态的应用场景。攻击者构造一个网页,通过重定向或者其他方式将其发送给用户浏览器,当用户登录了受害网站后,攻击者的想法就得以实现。CORS 正是这种情况的帮凶,因为 CORS 服务默认不校验请求来源,导致攻击者可以轻易构造请求并携带合法的 session id 等信息。

对于 CSRF 攻击问题,一些赢在了防范措施,例如增加 token 认证等。正确使用 token 认证,在站内逻辑认证的过程中,即使携带 sessionid 等敏感信息,攻击者仍不可能准确模拟一条合法的请求。

2. 权限提升
如果 API 没有正确地验证跨域请求,攻击者有可能通过 AJAX 请求修改某些内容或数据偷取敏感信息。例如,一个具有某项管理权限的 Web 页面被注入了恶意 JavaScript 代码,并发送了跨域攻击请求,则攻击者可能访问到其他模块中保密内容,并进行操作。

防范 CORS 安全性问题

  1. 端口绑定同源策略:配置 Web 应用程序或 Web 服务器只监听本地端口、本地 IP 地址或特定域名,从而确保网络请求只会来自受信任的浏览器或应用程序。
  2. 增加 CORS 攻击屏蔽策略:增加 referer 校验、检查 HTTP 头信息中的申请者和请求域名是否一致等。
  3. 使用 token 认证:正确使用 token 认证,系统可以在站内逻辑认证的过程中进行校验,针对外部攻击请求时,token 就会无效。

CORS 技术虽然便利了 API 的跨域访问,但是也带来了一些安全性问题。为了避免潜在的网络安全问题,开发者需要认真审视当前 Web 应用程序的安全性,并且采取有效的安全防范措施。

如果你日常会用到 api 管理工具的话,不妨看看我目前参与的这个开源项目,Postcat 开源的 API 管理工具,纯国产,免费的,主打插件生态,适合中小团队以及个人开发者使用,有 API 相关的核心功能。

搞懂 API,跨域资源贡献 (CORS )和安全性问题

目前在 Github 上 3.5 k star,如果你觉得这个项目还不错的话,不妨点个 star 支持一下~

Github:
https://github.com/Postcatlab/postcat

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
室与 室与
4年前
Cors跨域解决
一、浏览器跨域问题产生1、跨源资源共享(CORS)中文文档:https://developer.mozilla.org/zhCN/docs/Web/HTTP/Access_control_CORS2、什么是浏览器跨域问题指的是浏览器不能执行其他网站的脚本。JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象,即同源策略。就好比我
Wesley13 Wesley13
3年前
Nginx解决跨域问题(CORS)
前言CORS(CrossOriginResourceSharing)跨域资源共享,是一种允许当前域(domain)的资源(比如html/js/webservice)被其他域(domain)的脚本请求访问的机制,通常由于同域安全策略(thesameoriginsecuritypolicy)浏览器会禁止这种跨域请求。 如:a.c
Wesley13 Wesley13
3年前
cors跨域之简单请求与预检请求(发送自定义请求头)
引子前后端分离这个问题,对cors的应用不断增多,暴露出的问题也接踵而至。正所谓虑一千次,不如去做一次。犹豫一万次,不如实践一次,本篇主要讨论在发送ajax请求,头部带上自定义token验证验证,暴露出的跨域问题。先说说定义CORS:跨来源资源共享(CORS)是一份浏览器技术的规范,提供了Web服务从不同网域传来沙盒脚
Wesley13 Wesley13
3年前
JAVA服务端配置允许跨域请求
CORS是一个W3C标准,全称是”跨域资源共享”(Crossoriginresourcesharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。1.加入CROS依赖的包<dependency<groupIdcom.thetransactionco
Easter79 Easter79
3年前
SpringBoot解决跨域问题
在开发前后端分离的项目时,常常会碰到跨域请求的问题。这是因为浏览器的安全性限制,不允许Ajax访问协议不同、域名不同、端口号不同的数据接口,否则会出报No'AccessControlAllowOrigin'headerispresentontherequestedresource错误。SpringBoot通过设置cors(跨源
Stella981 Stella981
3年前
SpringBoot 实现前后端分离的跨域访问(CORS)
社区原文链接:http://www.spring4all.com/article/177(https://www.oschina.net/action/GoToLink?urlhttp%3A%2F%2Fwww.spring4all.com%2Farticle%2F177)序言:跨域资源共享向来都是热门的需求,使用CORS可以帮助我们快速实现跨域
Wesley13 Wesley13
3年前
PHP开启CORS
CORS定义CrossOriginResourceSharing(CORS)跨来源资源共享是一份浏览器技术的规范,提供了Web服务从不同域传来沙盒(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fzh.wikipedia.org%2Fwiki%2F%25E
Stella981 Stella981
3年前
SpringBoot解决跨域问题
在开发前后端分离的项目时,常常会碰到跨域请求的问题。这是因为浏览器的安全性限制,不允许Ajax访问协议不同、域名不同、端口号不同的数据接口,否则会出报No'AccessControlAllowOrigin'headerispresentontherequestedresource错误。SpringBoot通过设置cors(跨源
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
5个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(