【Academy】SSRF ------ Server-side request forgery

news2025/3/13 16:03:40

SSRF ------ Server-side request forgery

  • 1. 什么是 SSRF?
  • 2. SSRF 攻击的影响是什么?
  • 3. 常见的 SSRF 攻击
    • 3.1 针对服务器的 SSRF 攻击
    • 3.2 针对其他后端系统的 SSRF 攻击
  • 4. 规避常见的 SSRF 防御
    • 4.1 具有基于黑名单的输入过滤器的 SSRF
    • 4.2 具有基于白名单的输入过滤器的 SSRF
    • 4.3 通过开放重定向绕过 SSRF 过滤器
  • 5. 盲 SSRF 漏洞
    • 5.1 盲 SSRF 漏洞有什么影响?
    • 5.2 如何查找和利用盲 SSRF 漏洞
  • 6. 寻找 SSRF 漏洞的隐藏攻击面
    • 6.1 请求中的部分 URL
    • 6.2 数据格式中的 URL
    • 6.3 通过 Referer 标头的 SSRF
  • 7. 如何防御 SSRF
    • 7.1 限制请求的目标范围
    • 7.2 验证用户输入
    • 7.3 安全的网络配置和架构设计
    • 7.4 监控和审计


概述
本文将解释什么是服务器端请求伪造 (SSRF),并介绍一些常见示例。还向您展示了如何查找和测试 SSRF 漏洞,以及如何防御 SSRF。


1. 什么是 SSRF?

服务器端请求伪造是一种 Web 安全漏洞,它允许攻击者使服务器端应用程序向意外位置发出请求。

在典型的 SSRF 攻击中,攻击者可能会导致服务器连接到组织基础设施中的仅限内部的服务。在其他情况下,它们可能能够强制服务器连接到任意外部系统。这可能会泄露敏感数据,例如授权凭证。


2. SSRF 攻击的影响是什么?

成功的 SSRF 攻击通常会导致未经授权的操作或访问组织内的数据。这可能位于易受攻击的应用程序中,也可能位于应用程序可以与之通信的其他后端系统上。在某些情况下,SSRF 漏洞可能允许攻击者执行任意命令。

导致连接到外部第三方系统的 SSRF 漏洞可能会导致恶意的后续攻击。这些可能看起来来自托管易受攻击的应用程序的组织。


3. 常见的 SSRF 攻击

服务端请求伪造(Server-Side Request Forgery,SSRF)攻击通常利用信任关系,从易受攻击的应用程序扩大攻击范围并执行未经授权的操作。这些信任关系可能存在于与服务器的关系中,或者与同一组织内的其他后端系统的关系中。


3.1 针对服务器的 SSRF 攻击

在针对服务器的服务端请求伪造(SSRF)攻击中,攻击者使应用程序通过其回环网络接口向托管该应用程序的服务器发出 HTTP 请求。这通常涉及提供一个带有主机名的 URL,例如127.0.0.1(指向回环适配器的保留 IP 地址)或localhost(同一个适配器的常用名称)。

例如,想象一个购物应用程序,它允许用户查看特定商店中的商品是否有库存。为了提供库存信息,应用程序必须查询各种后端 REST API。它通过前端 HTTP 请求将 URL 传递到相关的后端 API 端点来实现这一点。当用户查看商品的库存状态时,他们的浏览器会发出以下请求:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1

这会导致服务器向指定的 URL 发出请求,检索常用状态,并将其返回给用户。

在此示例中,攻击者可以修改请求以指定服务器本地的 URL:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://localhost/admin

服务器获取 /admin URL 的内容并将其返回给用户。

攻击者可以访问 /admin URL,但管理功能通常只有经过身份验证的用户才能访问。这意味着攻击者不会看到任何感兴趣的内容。但是,如果对 /admin URL 的请求来自本地计算机,则会绕过正常的访问控制。应用程序授予对管理功能的完全访问权限,因为请求似乎来自受信任的位置。

为什么应用程序以这种方式运行,并隐式信任来自本地计算机的请求?这可能是由于各种原因造成的:

  • 访问控制检查可能在位于应用服务器前面的不同组件中实现。当建立与服务器的连接时,该检查会被绕过。
  • 出于灾难恢复目的,应用程序可能允许来自本地机器的任何用户在不登录的情况下进行管理访问。这为管理员在丢失凭据的情况下恢复系统提供了一种方法。这是基于只有完全受信任的用户才会直接从服务器访问的假设。
  • 管理界面可能在与主应用程序不同的端口号上进行监听,并且可能无法被用户直接访问。

在这种信任关系中,来自本地计算机的请求的处理方式与普通请求的处理方式不同,通常会使 SSRF 成为严重漏洞。


3.2 针对其他后端系统的 SSRF 攻击

在某些情况下,应用程序服务器能够与用户无法直接访问的后端系统进行交互。这些系统通常具有不可路由的私有 IP 地址。后端系统通常受网络拓扑保护,因此它们的安全状况通常较弱。在许多情况下,内部后端系统包含敏感功能,任何能够与系统交互的人都可以在不进行身份验证的情况下访问这些功能。

在前面的示例中,假设后端 URL https://192.168.0.68/admin 有一个管理界面。攻击者可以提交以下请求来利用 SSRF 漏洞,并访问管理界面:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://192.168.0.68/admin

4. 规避常见的 SSRF 防御

通常可以看到应用程序中同时存在服务端请求伪造(SSRF)行为以及旨在防止恶意利用的防御措施。通常,这些防御措施可以被绕过。


4.1 具有基于黑名单的输入过滤器的 SSRF

某些应用程序会阻止包含主机名(如 127.0.0.1localhost)或敏感 URL(如 /admin)的输入。在这种情况下,您通常可以使用以下技术来规避过滤器:

  • 使用 127.0.0.1 的替代 IP 表示形式,例如 2130706433017700000001127.1
  • 注册您自己的域名,该域名解析为 127.0.0.1。您可以将 spoofed.burpcollaborator.net 用于此目的。
  • 使用 URL 编码或大小写变体对被阻止的字符串进行混淆处理。
  • 提供您控制的 URL,该 URL 将重定向到目标 URL。尝试对目标 URL 使用不同的重定向代码和不同的协议。例如,在重定向过程中从 http: 切换到 https: URL 已被证明会绕过某些反 SSRF 过滤器。

4.2 具有基于白名单的输入过滤器的 SSRF

某些应用程序只允许匹配允许值的白名单的输入。筛选器可能会在输入的开头查找匹配项,或者查找包含在输入中的匹配项。您可以通过利用 URL 解析中的不一致来绕过此过滤器。

URL 规范包含许多功能,当 URL 使用此方法实现临时解析和验证时,这些功能可能会被忽略:

  • 您可以使用 @ 字符将凭证嵌入到主机名之前的 URL 中。例如:
https://expected-host:fakepassword@evil-host
  • 您可以使用 # 字符来指示 URL 片段。例如:
https://evil-host#expected-host
  • 您可以利用 DNS 命名层次结构将所需的输入放入您控制的完全限定 DNS 名称中。例如:
https://expected-host.evil-host
  • 您可以对字符进行 URL 编码以混淆 URL 解析代码。如果实现筛选条件的代码处理 URL 编码字符的方式与执行后端 HTTP 请求的代码不同,则此功能特别有用。您还可以尝试双重编码字符;一些服务器以递归方式对他们收到的输入进行 URL 解码,这可能会导致进一步的差异。
  • 您可以结合使用这些技术。

4.3 通过开放重定向绕过 SSRF 过滤器

有时可以通过利用开放重定向漏洞来绕过基于过滤器的防御。

在前面的示例中,假设用户提交的 URL 经过严格验证,以防止恶意利用 SSRF 行为。但是,允许其 URL 的应用程序包含开放重定向漏洞。如果用于发出后端 HTTP 请求的 API 支持重定向,您可以构建一个满足筛选条件的 URL,并将请求重定向到所需的后端目标。

例如,该应用程序包含一个开放重定向漏洞,其中以下 URL:

/product/nextProduct?currentProductId=6&path=http://evil-user.net

返回重定向到:

http://evil-user.net

您可以利用开放重定向漏洞绕过 URL 过滤器,并按如下方式利用 SSRF 漏洞:

POST /product/stock HTTP/1.0
Content-Type: application/x-www-form-urlencoded
Content-Length: 118

stockApi=http://weliketoshop.net/product/nextProduct?currentProductId=6&path=http://192.168.0.68/admin

此 SSRF 漏洞之所以有效,是因为应用程序首先验证提供的 stockAPI URL 是否位于允许的域上,而事实确实如此。然后,应用程序请求提供的 URL,这将触发开放重定向。它遵循重定向,并向攻击者选择的内部 URL 发出请求。


5. 盲 SSRF 漏洞

如果您可以使应用程序向提供的 URL 发出后端 HTTP 请求,但后端请求的响应未在应用程序的前端响应中返回,则会出现盲目 SSRF 漏洞。

盲 SSRF 更难被利用,但有时会导致在服务器或其他后端组件上完全远程执行代码。

在本节中,我们将解释什么是服务器端盲请求伪造,描述一些常见的盲 SSRF 示例,并解释如何查找和利用盲 SSRF 漏洞。


什么是盲 SSRF?
当可以诱使应用程序向提供的 URL 发出后端 HTTP 请求,但后端请求的响应未在应用程序的前端响应中返回时,就会出现盲 SSRF 漏洞。


5.1 盲 SSRF 漏洞有什么影响?

由于其单向性,盲 SSRF 漏洞的影响通常低于完全知情的 SSRF 漏洞。它们不能被轻易地利用来从后端系统检索敏感数据,尽管在某些情况下可以利用它们来实现完全远程代码执行。


5.2 如何查找和利用盲 SSRF 漏洞

检测盲 SSRF 漏洞的最可靠方法是使用带外 (OAST) 技术。这涉及尝试触发对您控制的外部系统的 HTTP 请求,并监控与该系统的网络交互。

使用带外技术的最简单、最有效的方法是使用 Burp Collaborator。您可以使用 Burp Collaborator 生成唯一的域名,将这些域名发送到有效负载,并监控与这些域的任何交互。如果观察到来自应用程序的传入 HTTP 请求,则它容易受到 SSRF 的攻击。

注意
在测试 SSRF 漏洞时,通常会观察到对提供的协作者域的 DNS 查找,但没有后续的 HTTP 请求。这通常是因为应用程序尝试向域发出 HTTP 请求,这导致了初始 DNS 查找,但实际的 HTTP 请求被网络级过滤阻止。基础设施允许出站 DNS 流量是相对常见的,因为这样做有很多用途,但会阻止与意外目的地的 HTTP 连接。

简单地识别可能触发带外 HTTP 请求的盲 SSRF 漏洞本身并不能提供可利用的途径。由于您无法查看来自后端请求的响应,因此该行为不能用于浏览应用程序服务器可以访问的系统上的内容。但是,它仍可用于探测服务器本身或其他后端系统上的其他漏洞。您可以盲目扫描内部 IP 地址空间,发送旨在检测已知漏洞的有效负载。如果这些有效负载还采用盲带外技术,则您可能会在未修补的内部服务器上发现严重漏洞。

利用盲 SSRF 漏洞的另一种途径是诱使应用程序连接到攻击者控制下的系统,并将恶意响应返回给建立连接的 HTTP 客户端。如果您可以利用服务器的 HTTP 实现中的严重客户端漏洞,则可能能够在应用程序基础设施中实现远程代码执行。


6. 寻找 SSRF 漏洞的隐藏攻击面

许多服务器端请求伪造漏洞很容易被发现,因为应用程序的正常流量涉及包含完整 URL 的请求参数。服务器端请求伪造的其他示例则更难定位。


6.1 请求中的部分 URL

有时,应用程序仅将主机名或 URL 路径的一部分放入请求参数中。然后,提交的值将在服务器端合并到请求的完整 URL 中。如果该值很容易被识别为主机名或 URL 路径,则潜在的攻击面可能很明显。但是,作为完整 SSRF 的可利用性可能会受到限制,因为您无法控制请求的整个 URL。


6.2 数据格式中的 URL

一些应用程序以特定格式传输数据,该格式的规范允许包含可能被格式的数据解析器请求的 URL。一个明显的例子是 XML 数据格式,它在 Web 应用程序中被广泛用于将结构化数据从客户端传输到服务器。当应用程序接受 XML 格式的数据并进行解析时,它可能容易受到 XXE 注入攻击。它也可能通过 XXE 容易受到 SSRF 攻击。


6.3 通过 Referer 标头的 SSRF

一些应用程序使用服务器端分析软件来跟踪访问者。该软件通常会在请求中记录 Referer 标头,以便它可以跟踪传入的链接。通常,分析软件会访问 Referer 标头中显示的任何第三方 URL。这样做通常是为了分析引用网站的内容,包括传入链接中使用的锚文本。因此,Referer 标头通常是 SSRF 漏洞的有用攻击面。


7. 如何防御 SSRF


7.1 限制请求的目标范围

  1. 基于IP地址的限制

    • 维护一个合法的IP地址白名单。只允许服务器向在白名单中的IP地址发起请求。例如,在配置文件中明确列出内部服务的IP地址段,如192.168.1.0/24用于内部数据库服务器的访问。当有请求发起时,检查目标IP是否在这个白名单范围内。
    • 对于互联网服务,可以限制对知名的、经过认证的第三方服务提供商的IP地址进行访问。如支付网关的固定IP段,防止请求被伪造到恶意的IP地址。
  2. 基于域名的限制

    • 同样建立一个可信域名的白名单。通过配置服务器的DNS解析,确保请求的域名解析后的IP地址是在预期范围内。例如,只允许向自己公司的官方合作伙伴域名(如partnercompany.com)发起请求,并且定期检查这些域名的解析记录是否被篡改。
    • 可以使用域名系统安全扩展(DNSSEC)来验证域名解析的完整性和真实性,防止攻击者通过篡改DNS记录将请求重定向到恶意服务器。
  3. 限制端口范围

    • 明确指定允许访问的端口。对于大多数应用,只需要访问特定的几个端口,如HTTP服务的80端口、HTTPS服务的443端口等。限制服务器只能向这些指定端口发起请求,避免向一些可能被利用的敏感端口(如数据库默认端口3306等)发送请求。
    • 例如,在网络代理设置中,配置只允许通过端口80和443进行外部连接,对于其他端口的请求进行拦截和记录。

7.2 验证用户输入

  1. 输入格式检查
    • 对用户输入的URL或其他可能用于请求的参数进行严格的格式检查。例如,确保输入的URL符合标准的URL格式(如使用正则表达式来验证是否包含正确的协议头http://https://,以及合法的域名和路径部分)。
    • 对于不符合格式要求的输入,直接拒绝并返回错误信息。例如,如果用户输入的URL缺少协议部分或者包含非法字符(如控制字符),就判定为非法输入。
  2. 过滤敏感信息
    • 检查用户输入中是否包含内部网络的IP地址、敏感的域名或其他可能导致SSRF攻击的信息。例如,过滤掉包含本地回环地址(如127.0.0.1)、私有IP地址段(如10.0.0.0/8172.16.0.0/12192.168.0.0/16)等内容。
    • 还可以过滤掉可能指向内部管理接口的特定路径,如/admin/internal-api等,防止攻击者通过SSRF访问这些内部敏感资源。

7.3 安全的网络配置和架构设计

  1. 使用独立的网络环境和代理
    • 将对外请求的服务器放置在独立的网络区域,通过代理服务器进行请求转发。代理服务器可以对请求进行额外的安全检查和过滤,例如检查请求的合法性、记录请求日志等。
    • 例如,在企业网络中,将面向互联网的Web服务器和内部应用服务器之间设置防火墙和代理,Web服务器通过代理向内部服务器请求数据,代理可以限制请求的流向和内容。
  2. 采用微服务架构的安全策略
    • 在微服务架构中,每个服务之间的通信可以采用安全的通信协议,如TLS加密。并且可以在服务注册和发现机制中添加安全验证,防止未经授权的服务访问。
    • 例如,服务A需要访问服务B,服务A在向服务注册中心请求服务B的地址时,需要进行身份验证,服务注册中心也会验证服务A是否有访问服务B的权限,这样可以避免恶意服务通过SSRF攻击获取服务B的信息。

7.4 监控和审计

  1. 请求日志记录
    • 详细记录服务器发起的所有外部请求,包括请求的URL、请求时间、请求源等信息。通过分析日志,可以及时发现异常的请求模式,如频繁请求到非法的IP地址或域名。
    • 例如,设置日志记录系统,记录每次请求的详细信息,当出现安全事件时,可以通过查询日志来追踪攻击路径和攻击者可能利用的漏洞。
  2. 异常检测系统
    • 建立异常检测机制,通过分析请求的流量、频率、目标等特征来识别可能的SSRF攻击。例如,如果发现服务器突然向大量不同的未知IP地址发起请求,或者请求的频率超出正常范围,就触发警报。
    • 可以使用机器学习算法来建立请求行为的基线模型,当实际请求行为偏离基线时,判定为异常情况并进行进一步的调查。

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

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

相关文章

STM32之I2C硬件外设

注意:硬件I2C的引脚是固定的 SDA和SCL都是复用到外部引脚。 SDA发送时数据寄存器的数据在数据移位寄存器空闲的状态下进入数据移位寄存器,此时会置状态寄存器的TXE为1,表示发送寄存器为空,然后往数据控制寄存器中一位一位的移送数…

windows版本的时序数据库TDengine安装以及可视化工具

了解时序数据库TDengine,可以点击官方文档进行详细查阅 安装步骤 首先找到自己需要下载的版本,这边我暂时只写windows版本的安装 首先我们需要点开官网,找到发布历史,目前TDengine的windows版本只更新到3.0.7.1,我们…

【AI】单台10卡4090 openEuler服务器离线部署kasm workspace 提供简单的GPU云服务 虚拟化桌面

下载网址 Downloads | Kasm Workspaces 文件连接 wget https://kasm-static-content.s3.amazonaws.com/kasm_release_plugin_images_amd64_1.16.1.98d6fa.tar.gz wget https://kasm-static-content.s3.amazonaws.com/kasm_release_1.16.1.98d6fa.tar.gz wget https://kasm-st…

NetAssist 5.0.14网络助手基础使用及自动应答使用方案

以下是NetAssist v5.0.14自动应答功能的详细使用步骤: 一、基础准备: 工具下载网址页面:https://www.cmsoft.cn/resource/102.html 下载安装好后,根据需要可以创建多个server,双击程序图标运行即可,下面…

47.HarmonyOS NEXT 登录模块开发教程(二):一键登录页面实现

温馨提示:本篇博客的详细代码已发布到 git : https://gitcode.com/nutpi/HarmonyosNext 可以下载运行哦! HarmonyOS NEXT 登录模块开发教程(二):一键登录页面实现 文章目录 HarmonyOS NEXT 登录模块开发教程&#xff0…

5.1 程序调试

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的 本节中为了演示方便,使用的代码如下: 【例 5.1】【项目:code5-001】程序的调试。 static void Ma…

Cursor初体验:excel转成CANoe的vsysvar文件

今天公司大佬先锋们给培训了cursor的使用,还给注册了官方账号!跃跃欲试,但是测试任务好重,结合第三方工具开发也是没有头绪。 但巧的是,刚好下午有同事有个需求,想要把一个几千行的excel转成canoe的系统变…

vue3-element-admin 前后端本地启动联调

一、后端环境准备 1.1、下载地址 gitee 下载地址 1.2、环境要求 JDK 17 1.3、项目启动 克隆项目 git clone https://gitee.com/youlaiorg/youlai-boot.git数据库初始化 执行 youlai_boot.sql 脚本完成数据库创建、表结构和基础数据的初始化。 修改配置 application-dev.y…

《MySQL数据库从零搭建到高效管理|库的基本操作》

目录 一、数据库的操作 1.1 展示数据库 1.2 创建数据库 1.3 使用数据库 1.4 查看当前数据库 1.5 删除数据库 1.6 小结 二、常用数据类型 2.1 数值类型 2.2 字符串类型 2.3 日期类型 一、数据库的操作 打开MySQL命令行客户端,安装完MySQL后会有两个客户端…

mac使用Homebrew安装miniconda(mac搭建python环境),并在IDEA中集成miniconda环境

一、安装Homebrew mac安装brew 二、使用Homebrew安装miniconda brew search condabrew install miniconda安装完成后的截图: # 查看是否安装成功 brew list环境变量(无需手动配置) 先执行命令看能不能正常返回,如果不能正常…

Linux基础开发工具—vim

目录 1、vim的概念 2、vim的常见模式 2.1 演示切换vim模式 3、vim命令模式常用操作 3.1 移动光标 3.2 删除文字 3.3 复制 3.4 替换 4、vim底行模式常用命令 4.1 查找字符 5、vim的配置文件 1、vim的概念 Vim全称是Vi IMproved,即说明它是Vi编辑器的增强…

【C++】数据结构 队列的实现

本篇博客给大家带来的是用C语言来实现数据结构的队列的实现! 🐟🐟文章专栏:数据结构 🚀🚀若有问题评论区下讨论,我会及时回答 ❤❤欢迎大家点赞、收藏、分享! 今日思想:你…

macOS 终端优化

macOS 安装、优化、还原、升级 Oh My Zsh 完全指南 🚀 Oh My Zsh 是 macOS 终端增强的利器,它能提供强大的自动补全、主题定制和插件支持,让你的终端更高效、更炫酷。本文将全面介绍 如何安装、优化、还原、重新安装和升级 Oh My Zsh&#x…

大语言模型-1.2-大模型技术基础

简介 本博客内容是《大语言模型》一书的读书笔记,该书是中国人民大学高瓴人工智能学院赵鑫教授团队出品,覆盖大语言模型训练与使用的全流程,从预训练到微调与对齐,从使用技术到评测应用,帮助学员全面掌握大语言模型的…

Flutter 按钮组件 TextButton 详解

目录 1. 引言 2. TextButton 的基本用法 3. 主要属性 4. 自定义按钮样式 4.1 修改文本颜色 4.2 添加背景色 4.3 修改按钮形状和边距 4.4 样式定制 5. 高级应用技巧 5.1 图标文本组合 5.2 主题统一配置 5.3 动态交互 6. 性能优化与注意事项 6.1 点击区域优化 6.…

Qt 数据库操作(Sqlite)

数据库简介 关于数据库的基础知识这里就不做介绍了,相关博客可以查看: SQL基础知识 数据库学霸笔记 上面博客都写的比较详细,本文主要介绍如何使用Qt进行数据库相关操作,数据库分为关系型数据库和非关系型数据,关系…

vue 自行封装组件,类似于el-tree组件结构

背景: 接口返回是平面数组,需要经过分类处理,转成多维数组,以满足封装组件的数据结构。 有用到插件lodash。 import { groupBy, flattenDeep } from "lodash"; 效果展示: 处理数据: 对于接口返回…

信奥赛CSP-J复赛集训(模拟算法专题)(10):P2356 弹珠游戏

信奥赛CSP-J复赛集训(模拟算法专题)(10):P2356 弹珠游戏 题目背景 题目描述 MedalPluS 和他的小伙伴 NOIRP 发掘了一个骨灰级别的游戏——超级弹珠。 游戏的内容是:在一个 n n n \times n nn 的矩阵里,有若干个敌人,你的弹珠可以摧毁敌人,但只能攻击你所在的行、…

Windows 图形显示驱动开发-WDDM 3.2- WDDM 功能的内核模式测试

概述 在某些情况下,引入了基于 WDDM 或 MCDM 的新计算设备,并且这些设备的驱动程序不支持 D3D 运行时。 为了帮助验证此类驱动程序,将功能添加到 Dxgkrnl ,以便仅使用内核模式 thunk 进行验证;也就是说,无需涉及 D3D …

SpringBoot 入门--工程创建

IDEA创建SpringBoot项目 SpringBoot 3.1.5 需要java17 ① 创建Maven工程 ② 导入spring-boot-stater-web起步依赖 ③ 编写Controller ④ 提供启动类 1.打开IDEA,新建项目 2.点击下一步,并勾选web开发相关依赖 3.勾选完点击Create,然后配置…