#渗透测试#网络安全# 一文了解什么是跨域CROS!!!

news2025/1/11 21:55:00

免责声明 本教程仅为合法的教学目的而准备,严禁用于任何形式的违法犯罪活动及其他商业行为,在使用本教程前,您应确保该行为符合当地的法律法规,继续阅读即表示您需自行承担所有操作的后果,如有异议,请立即停止本文章读。

目录

一、什么是CORS

跨域请求的背景

CORS的工作原理

CORS的实现

总结

二、CORS预检请求的详细流程解析

预检请求的触发条件

预检请求的详细流程

示例代码

总结

三、CORS预检请求的安全性分析

四、服务器响应CORS预检的配置方法

五、CORS预检请求常见错误排查

六、CORS配置不当导致的安全漏洞案例

案例一:Access-Control-Allow-Origin设置为*

案例二:Access-Control-Allow-Credentials设置为true

案例三:Access-Control-Allow-Origin设置为请求头中的Origin字段

七、如何避免CORS配置不当导致的安全漏洞

八、如何检测CORS配置的安全性?

方法一:手动测试

方法二:使用自动化工具

方法三:参考安全最佳实践


一、什么是CORS

CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种用于在浏览器中处理跨域资源访问的机制。当一个网页尝试从一个源请求获取资源,而该资源的服务器与网页所在的源不同时,就会涉及到跨域请求。CORS通过在HTTP请求头中添加一些特定的字段信息来进行通信,以告知服务器是否支持跨域请求,从而使得网页能够在受限的情况下安全地进行跨域资源访问。

跨域请求的背景

在默认情况下,浏览器的同源策略会限制跨域请求,即只允许网页从同一域名下获取数据。这是为了保护用户的安全和隐私。然而,在某些情况下,我们希望网页能够跨域请求并获取其他域名下的资源,这时就需要使用CORS来解决跨域问题。

CORS的工作原理

CORS通过在HTTP请求头中添加一些特定的字段信息来进行通信。具体来说,当网页发送跨域请求时,浏览器会自动发送一个预检请求(OPTIONS请求)给服务器,该请求包含了一些额外的头信息,如Origin(标识发起请求的源)、Access-Control-Request-Method(请求方法)、Access-Control-Request-Headers(请求头)等。服务器收到预检请求后,根据请求头中的信息,决定是否允许该跨域请求。

如果服务器确认允许,就会在响应头中添加一些字段信息,如Access-Control-Allow-Origin(指定允许的源)、Access-Control-Allow-Methods(指定允许的请求方法)、Access-Control-Allow-Headers(指定允许的请求头)等。

CORS的实现

CORS的实现主要包括一些客户端的工作以及两类服务端的处理。服务端需要对满足以下所有条件的HTTP请求做出相应的CORS回应:

  1. 如果Origin被服务端允许,服务端返回请求是带有Access-Control-Allow-Origin头,并且这个头部信息的值和客户端Origin的值保持一致;否则就表示不被允许。
  2. 如果Access-Control-Allow-Origin被设置成*,则意味着任何Origin都被允许。注意:如果所访问的资源需要凭证,那么Access-Control-Allow-Origin则不应该被设置为*,而且Access-Control-Allow-Credentials头需要被设置成true

总结

CORS是一种用于在浏览器中处理跨域资源访问的机制,它通过在HTTP请求头中添加一些特定的字段信息来进行通信,以告知服务器是否支持跨域请求。CORS的实现主要包括客户端和服务器端的工作,通过设置特定的HTTP头来控制浏览器是否允许跨域请求。

二、CORS预检请求的详细流程解析

CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种用于在浏览器中处理跨域资源访问的机制。当一个网页尝试从一个源请求获取资源,而该资源的服务器与网页所在的源不同时,就会涉及到跨域请求。为了确保跨域请求的安全性,浏览器会在发送实际请求之前,先发送一个预检请求(OPTIONS请求),以确认服务器是否允许该跨域请求。

预检请求的触发条件

预检请求并不是每次跨域请求都会触发,而是满足以下条件之一时才会触发:

  1. 请求方法:如果请求方法不是GET、POST、HEAD这三种之一,就会触发预检请求。例如PUT、DELETE等方法的请求会触发预检请求。
  2. 自定义头字段:当请求包含自定义头字段时,会触发预检请求。例如在请求中设置了自定义的头信息如test:test,就会触发预检请求。
  3. 特定MIME类型的POST请求:对于搭配某些MIME类型的POST请求(非Content-Type为特定三种类型的POST请求)也会触发预检请求。

预检请求的详细流程

  1. 发送预检请求:当满足触发条件时,浏览器会自动发送一个OPTIONS请求给服务器。该请求包含了一些额外的头信息,如Origin(标识发起请求的源)、Access-Control-Request-Method(请求方法)、Access-Control-Request-Headers(请求头)等。

  2. 服务器处理预检请求:服务器接收到预检请求后,会根据请求头中的信息,决定是否允许该跨域请求。如果允许,服务器会在响应头中添加一些字段信息,如Access-Control-Allow-Origin(指定允许的源)、Access-Control-Allow-Methods(指定允许的请求方法)、Access-Control-Allow-Headers(指定允许的请求头)等。

  3. 浏览器处理预检请求的响应:浏览器接收到服务器的响应后,会检查响应头中的CORS头信息,以确定是否允许实际请求。如果允许,浏览器才会真正发送实际请求。

  4. 发送实际请求:如果预检请求成功,浏览器会发送实际请求。此时,服务器会根据实际请求的内容,返回相应的资源。

示例代码

以下是一个使用fetch API发送跨域请求的示例代码,其中包含了预检请求的触发过程:

// 假设我们请求https://api.github.com/ ,这个接口支持跨域访问 
// 通过添加自定义请求头,来触发预检请求 
var requestOptions = {
  method: 'GET',
  headers: {
    test: 'test' // 自定义的头信息 
  },
  redirect: 'follow'
};
 
fetch('https://api.github.com/',  requestOptions)
  .then(response => response.json()) 
  .then(result => console.log(result)) 
  .catch(error => console.log('error',  error));

在上述代码中,由于添加了自定义头信息,浏览器会先发送一个OPTIONS预检请求,探测服务器是否允许实际的GET请求跨域访问。服务器根据自身的规则返回响应头信息,如果允许跨域,浏览器才会真正发送GET请求。

总结

CORS预检请求是为了确保跨域请求的安全性而设计的一种机制。通过在发送实际请求之前,先发送一个预检请求,浏览器可以确认服务器是否允许该跨域请求,从而避免潜在的安全风险。预检请求的触发条件包括请求方法、自定义头字段和特定MIME类型的POST请求。了解CORS预检请求的详细流程,有助于开发者更好地理解和使用CORS机制,从而实现安全的跨域资源访问。

三、CORS预检请求的安全性分析

CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种用于在浏览器中处理跨域资源访问的机制。为了确保跨域请求的安全性,浏览器会在发送实际请求之前,先发送一个预检请求(OPTIONS请求),以确认服务器是否允许该跨域请求。这种机制虽然提高了跨域请求的安全性,但也带来了一些新的安全风险。

  1. CORS误配置风险:如果服务器对CORS的配置不当,可能会导致未经授权的跨域请求被接受,从而引发安全问题。例如,服务器错误地配置了Access-Control-Allow-Origin*,允许所有源的跨域请求,这可能会导致敏感信息泄露。

  2. CSRF(跨站请求伪造)风险:攻击者可以利用CORS实现CSRF攻击。例如,恶意网站可以利用CORS请求接口获取用户数据或执行增删改操作。为了防止CSRF攻击,服务器应该在CORS请求中验证Origin头字段,并且在响应中设置合适的Access-Control-Allow-Credentials值。

  3. 信息泄露风险:攻击者可以利用CORS的一些特性获取敏感信息。例如,根据CORS头部判断网站架构,根据错误信息判断后台技术栈等。

  4. 报文劫持风险:攻击者可以在客户端通过JavaScript劫持CORS报文,改变请求参数、添加非法头部甚至修改响应内容。为了防止报文劫持,服务器应该在响应中设置合适的Content-Security-Policy(CSP)头部。

四、服务器响应CORS预检的配置方法

为了确保CORS预检请求的安全性,服务器需要正确配置响应头信息。以下是一些常见的配置方法:

  1. 设置Access-Control-Allow-Origin:该头部指定了允许进行跨域请求的源。例如,设置为https://example.com 表示只允许来自https://example.com 的跨域请求。如果设置为*,表示允许所有源的跨域请求,但需要注意,这样做可能会导致安全风险。

  2. 设置Access-Control-Allow-Methods:该头部指定了允许的请求方法。例如,设置为GET, POST, PUT, DELETE表示允许GET、POST、PUT、DELETE四种请求方法。

  3. 设置Access-Control-Allow-Headers:该头部指定了允许的请求头。例如,设置为Content-Type, Authorization表示允许Content-Type和Authorization两个请求头。

  4. 设置Access-Control-Allow-Credentials:该头部指定了是否允许发送凭据(如Cookies)。如果设置为true,表示允许发送凭据;如果设置为false,表示不允许发送凭据。

  5. 设置Access-Control-Max-Age:该头部指定了预检请求的结果可以被缓存的时间。例如,设置为86400表示预检请求的结果可以被缓存一天。

五、CORS预检请求常见错误排查

  1. 预检请求未通过:如果服务器拒绝了预检请求,浏览器将不会发送实际请求。此时,可以在浏览器的开发者工具中查看预检请求的响应头信息,检查是否有错误信息。例如,如果服务器没有设置Access-Control-Allow-Origin头部,预检请求将会失败。

  2. 实际请求未通过:如果预检请求通过了,但实际请求未通过,可以在浏览器的开发者工具中查看实际请求的响应头信息,检查是否有错误信息。例如,如果服务器没有设置Access-Control-Allow-Credentials头部,实际请求将会失败。

  3. 请求头信息错误:如果请求头信息错误,可能会导致预检请求或实际请求失败。例如,如果请求头中包含了不允许的自定义头部,预检请求将会失败。此时,可以检查请求头信息,确保其符合服务器的要求。

  4. 服务器配置错误:如果服务器配置错误,可能会导致预检请求或实际请求失败。例如,如果服务器没有正确设置CORS相关的响应头信息,预检请求将会失败。此时,可以检查服务器的配置文件,确保其正确配置了CORS相关的响应头信息。

六、CORS配置不当导致的安全漏洞案例

CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种用于在浏览器中处理跨域资源访问的机制。为了确保跨域请求的安全性,服务器需要正确配置CORS响应头信息。然而,许多开发者由于缺乏对CORS的理解,或者为了方便,往往会错误地配置CORS,从而导致安全漏洞。以下是一些CORS配置不当导致的安全漏洞案例。

案例一:Access-Control-Allow-Origin设置为*

在某些情况下,开发者为了方便,会将Access-Control-Allow-Origin设置为*,表示允许所有源的跨域请求。然而,这种做法可能会导致安全风险。例如,假设有一个网站https://example.com ,它的API接口允许跨域请求,并且Access-Control-Allow-Origin设置为*。此时,如果有一个恶意网站https://malicious.com ,它可以利用JavaScript代码向https://example.com 发送跨域请求,并且可以读取响应内容。这样,恶意网站就可以窃取用户的敏感信息。

案例二:Access-Control-Allow-Credentials设置为true

在某些情况下,开发者为了方便,会将Access-Control-Allow-Credentials设置为true,表示允许发送凭据(如Cookies)。然而,这种做法可能会导致安全风险。例如,假设有一个网站https://example.com ,它的API接口允许跨域请求,并且Access-Control-Allow-Credentials设置为true。此时,如果有一个恶意网站https://malicious.com ,它可以利用JavaScript代码向https://example.com 发送跨域请求,并且可以读取响应内容。这样,恶意网站就可以窃取用户的敏感信息。

案例三:Access-Control-Allow-Origin设置为请求头中的Origin字段

在某些情况下,开发者为了方便,会将Access-Control-Allow-Origin设置为请求头中的Origin字段。然而,这种做法可能会导致安全风险。例如,假设有一个网站https://example.com ,它的API接口允许跨域请求,并且Access-Control-Allow-Origin设置为请求头中的Origin字段。此时,如果有一个恶意网站https://malicious.com ,它可以利用JavaScript代码向https://example.com 发送跨域请求,并且可以读取响应内容。这样,恶意网站就可以窃取用户的敏感信息。

七、如何避免CORS配置不当导致的安全漏洞

  1. 不要将Access-Control-Allow-Origin设置为*:除非你确实希望允许所有源的跨域请求,否则不要将Access-Control-Allow-Origin设置为*。相反,你应该明确指定允许哪些源的跨域请求。

  2. 不要将Access-Control-Allow-Credentials设置为true:除非你确实希望允许发送凭据(如Cookies),否则不要将Access-Control-Allow-Credentials设置为true。相反,你应该明确指定是否允许发送凭据。

  3. 不要将Access-Control-Allow-Origin设置为请求头中的Origin字段:除非你确实希望允许所有源的跨域请求,否则不要将Access-Control-Allow-Origin设置为请求头中的Origin字段。相反,你应该明确指定允许哪些源的跨域请求。

  4. 使用Content-Security-Policy头部:为了防止CSRF攻击,服务器应该在响应中设置合适的Content-Security-Policy(CSP)头部。例如,设置为default-src 'self'表示只允许从同一个源加载资源。

  5. 使用X-Content-Type-Options头部:为了防止MIME类型嗅探攻击,服务器应该在响应中设置合适的X-Content-Type-Options头部。例如,设置为nosniff表示禁止浏览器对响应内容进行MIME类型嗅探。

  6. 使用X-Frame-Options头部:为了防止点击劫持攻击,服务器应该在响应中设置合适的X-Frame-Options头部。例如,设置为DENY表示禁止在iframe中加载页面。

  7. 使用Referrer-Policy头部:为了防止Referer信息泄露,服务器应该在响应中设置合适的Referrer-Policy头部。例如,设置为no-referrer表示禁止在请求中发送Referer信息。

  8. 使用Feature-Policy头部:为了防止滥用API,服务器应该在响应中设置合适的Feature-Policy头部。例如,设置为geolocation 'none'表示禁止使用地理位置API。

  9. 使用Expect-CT头部:为了防止中间人攻击,服务器应该在响应中设置合适的Expect-CT头部。例如,设置为max-age=30表示要求客户端在接下来的30秒内验证证书透明度。

  10. 使用Strict-Transport-Security头部:为了防止SSL/TLS降级攻击,服务器应该在响应中设置合适的Strict-Transport-Security头部。例如,设置为max-age=31536000; includeSubDomains; preload表示要求客户端在接下来的一年内只使用HTTPS连接,并且包括所有子域名。

通过以上措施,可以有效地避免CORS配置不当导致的安全漏洞。

八、如何检测CORS配置的安全性?

CORS(跨域资源共享)配置不当可能会导致严重的安全漏洞,因此检测CORS配置的安全性非常重要。以下是一些检测CORS配置安全性的方法和工具。

方法一:手动测试

手动测试是最基本的方法,可以通过以下步骤进行:

  1. 查看响应头:向目标网站发送跨域请求,并查看响应头中是否有CORS相关的头信息,如Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-Headers等。

  2. 测试不同的源:尝试从不同的源向目标网站发送跨域请求,看看目标网站是否允许这些请求。

  3. 测试凭据:尝试发送带有凭据(如Cookies)的跨域请求,看看目标网站是否允许这些请求。

  4. 测试不同的方法:尝试使用不同的HTTP方法(如GET、POST、PUT、DELETE等)向目标网站发送跨域请求,看看目标网站是否允许这些请求。

  5. 测试不同的头部:尝试在请求头中添加不同的头部信息,看看目标网站是否允许这些请求。

方法二:使用自动化工具

自动化工具可以大大提高检测效率,以下是一些常用的CORS配置漏洞检测工具:

  1. CORScanner:CORScanner是一款专为发现网站CORS配置错误漏洞而设计的Python工具。它支持多线程和文件输入,适合进行大规模的网络扫描任务1。

  2. OWASP ZAP:OWASP ZAP是一款开源的Web应用安全扫描工具,它内置了CORS配置漏洞检测功能。使用OWASP ZAP,可以轻松地检测出CORS配置不当导致的安全漏洞。

  3. Burp Suite:Burp Suite是一款功能强大的Web应用安全测试工具,它也可以用于检测CORS配置的安全性。通过使用Burp Suite的拦截功能,可以手动或自动地发送跨域请求,并查看响应头中的CORS相关头信息。

方法三:参考安全最佳实践

参考安全最佳实践可以帮助你更好地理解和配置CORS。以下是一些CORS配置的安全最佳实践:

  1. 明确指定允许的源:不要将Access-Control-Allow-Origin设置为*,而是明确指定允许哪些源的跨域请求。

  2. 谨慎使用Access-Control-Allow-Credentials:只有在确实需要发送凭据(如Cookies)的情况下,才将Access-Control-Allow-Credentials设置为true

  3. 限制允许的方法和头部:只允许必要的HTTP方法和头部信息,不要允许所有方法和头部信息。

  4. 使用预检请求:对于非简单请求,服务器应该先处理预检请求(OPTIONS请求),然后再处理实际请求。

  5. 定期审查和更新配置:定期审查和更新CORS配置,确保其符合最新的安全要求。

通过以上方法和工具,可以有效地检测CORS配置的安全性,从而防止CORS配置不当导致的安全漏洞。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2275136.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

国产编辑器EverEdit - 扩展脚本:关闭所有未修改文档

1 扩展脚本:关闭所有未修改文档 1.1 应用场景 当用户打开过多文档时,部分文档已经修改,而大部分没有修改,为了减少在众多已打开文档中来回跳转的不便,可以将没有修改的文档全部关闭,但目前提供的快速关闭窗…

IIS部署.NetCore/.Net8/.Net9项目(从装环境到配置Swagger)

一、介绍 随着.NetCore开源、以及版本的更新迭代,.NetCore的性能越来越好、功能也越来越丰富,作为纯后端提供Api已经变得越来越频繁,与之配套的接口组件Swagger也成为很多人的选择。下面介绍在IIS上部署Swagger的详细过程。 二、安装IIS服务…

第R4周:LSTM-火灾温度预测

🍨 本文为🔗365天深度学习训练营 中的学习记录博客🍖 原作者:K同学啊 文章目录 一、代码流程1、导入包,设置GPU2、导入数据3、数据集可视化4、数据集预处理5、设置X,y6、划分数据集7、构建模型8、定义训练函…

【python自写包模块的标准化方法】

目标: 自写一个包,提供关于字符串和文件的模块 要求对异常可以检测 str_tools.py: def str_reverse(s):""":param s: 传入的字符串:return: 反转后的字符串"""# i -1# j 0# s2 ""# while i > (-len(s)):# s2 s[i]# …

Win10本地部署大语言模型ChatGLM2-6B

鸣谢《ChatGLM2-6B|开源本地化语言模型》作者PhiltreX 作者显卡为英伟达4060 安装程序 打开CMD命令行,在D盘新建目录openai.wiki if not exist D:\openai.wiki mkdir D:\openai.wiki 强制切换工作路径为D盘的openai.wiki文件夹。 cd /d D:\openai.wik…

【简博士统计学习方法】第1章:1. 统计学习的定义与分类

自用笔记 1. 统计学习的定义与分类 1.1 统计学习的概念 统计学习(Statistical Machine Learning)是关于计算机基于数据构建概率统计模型并运用模型对数据进行预测与分析的一门学科。 以计算机和网络为平台;以数据为研究对象;以…

Unity 人体切片三维可视化,可任意裁切切割。查看不同断层的图像。

Unity 人体切片三维可视化,真彩色,可任意裁切切割。查看不同断层的图像。 点击查看效果: 视频效果

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图)

汽车基础软件AutoSAR自学攻略(四)-AutoSAR CP分层架构(3) (万字长文-配21张彩图) 前面的两篇博文简述了AutoSAR CP分层架构的概念,下面我们来具体到每一层的具体内容进行讲解,每一层的每一个功能块力求用一个总览图,外加一个例子的图给大家进…

科研绘图系列:R语言绘制Y轴截断分组柱状图(y-axis break bar plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍特点意义加载R包数据下载导入数据数据预处理画图输出总结系统信息介绍 Y轴截断分组柱状图是一种特殊的柱状图,其特点是Y轴的刻度被截断,即在某个范围内省略了部分刻度。这种图表…

慧集通(DataLinkX)iPaaS集成平台-数据流程之流程透明化调试功能简介

在线运行流程 查看运行状态 流程第一次执行状态显示 流程第二次执行状态显示(由于订单已同步到七星ERP中,由于还是这些订单所以第二次同步时就报错了) 点击查看节点组件的详细入参与出参信息 U8C销售订单读取组件执行时详情 入参-查询条件…

PostgreSQL技术内幕22:vacuum full 和 vacuum

文章目录 0.简介1.概念及使用方式2.工作原理2.1 主要功能2.2 清理流程2.3 防止事务id环绕说明 3.使用建议 0.简介 在之前介绍MVCC文章中介绍过常见的MVCC实现的两种方式,一种是将旧数据放到回滚段,一种是直接生成一条新数据(对于删除是不删除…

kubernetes第七天

1.影响pod调度的因素 nodeName 节点名 resources 资源限制 hostNetwork 宿主机网络 污点 污点容忍 Pod亲和性 Pod反亲和性 节点亲和性 2.污点 通常是作用于worker节点上,其可以影响pod的调度 语法:key[value]:effect effect:[ɪˈfek…

【CSS】HTML页面定位CSS - position 属性 relative 、absolute、fixed 、sticky

目录 relative 相对定位 absolute 绝对定位 fixed 固定定位 sticky 粘性定位 position:relative 、absolute、fixed 、sticky (四选一) top:距离上面的像素 bottom:距离底部的像素 left:距离左边的像素…

Redis数据库——Redis快的原因

本文详细介绍redis为什么这么快的原因,这里是本系列文章的总结篇(后面会补充一些内容,或者在原文上进行更新迭代),将从各方面出发解释为什么redis快,受欢迎的原因。 文章目录 内存内存数据库预分配内存 数据…

排序:插入、选择、交换、归并排序

排序 :所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。 稳定性 :假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,…

RocketMQ 和 Kafka 有什么区别?

目录 RocketMQ 是什么? RocketMQ 和 Kafka 的区别 在架构上做减法 简化协调节点 简化分区 Kafka 的底层存储 RocketMQ 的底层存储 简化备份模型 在功能上做加法 消息过滤 支持事务 加入延时队列 加入死信队列 消息回溯 总结 来源:面试官:RocketMQ 和 Kafka 有…

赛车微型配件订销管理系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 赛车微型配件行业通常具有产品多样性、需求不确定性、市场竞争激烈等特点。配件供应商需要根据市场需求及时调整产品结构和库存,同时要把握好供应链管理和销售渠道。传统的赛车微型配件订销管理往往依赖于人工经验和简单的数据分析,效率低下且容易…

公众号如何通过openid获取unionid

通过接口 https://api.weixin.qq.com/cgi-bin/user/info?access_tokenxxxxxxx&langzh_CN 返回的数据如下: 前提是必须绑定 微信开放平台 token如何获取呢 代码如下: String tokenUrl "https://api.weixin.qq.com/cgi-bin/token"; …

半导体数据分析: 玩转WM-811K Wafermap 数据集(二) AI 机器学习

一、数据集回顾 前面我们已经基本了解了WM-811K Wafermap 数据集,并通过几段代码,熟悉了这个数据集的数据结构,这里为了方便各位连续理解,让我们再回顾一下: WM-811K Wafermap 数据集是一个在半导体制造领域广泛使用…

协同过滤算法私人诊所系统|Java|SpringBoot|VUE|

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SpringBoot、Mybatis-Plus、VUE、jquery,html 5⃣️…