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

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

目录

一、什么是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.mzph.cn/diannao/66668.shtml

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

相关文章

ClickHouse vs StarRocks 选型对比

一、面向列存的 DBMS 新的选择 Hadoop 从诞生已经十三年了,Hadoop 的供应商争先恐后的为 Hadoop 贡献各种开源插件,发明各种的解决方案技术栈,一方面确实帮助很多用户解决了问题,但另一方面因为繁杂的技术栈与高昂的维护成本&…

Win11家庭版转专业版

Win11家庭版转专业版(亲测有效) 第一步 【断网】输入这个密钥: R8NJ8-9X7PV-C7RCR-F3J9X-KQBP6 第二步 点击下一步会自动重启 第三步 【联网】输入这个密钥: F3NWX-VFMFC-MHYYF-BCJ3K-QV66Y 注意 两次输入密钥的地方一致 …

IP 地址与蜜罐技术

基于IP的地址的蜜罐技术是一种主动防御策略,它能够通过在网络上布置的一些看似正常没问题的IP地址来吸引恶意者的注意,将恶意者引导到预先布置好的伪装的目标之中。 如何实现蜜罐技术 当恶意攻击者在网络中四处扫描,寻找可入侵的目标时&…

【Word_笔记】Word的修订模式内容改为颜色标记

需求如下:请把修改后的部分直接在原文标出来,不要采用修订模式 步骤1:打开需要转换的word后,同时按住alt和F11 进入(Microsoft Visual Basic for Appliations) 步骤2:插入 ---- 模块 步骤3&…

[0405].第05节:搭建Redis主从架构

Redis学习大纲 一、3主3从的集群配置: 1.1.集群规划 1.分片集群需要的节点数量较多,这里我们搭建一个最小的分片集群,包含3个master节点,每个master包含一个slave节点,结构如下: 2.每组是一主一从&#x…

科研绘图系列:R语言绘制分组箱线图(boxplot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载导入数据数据预处理画图输出系统信息介绍 科研绘图系列:R语言绘制分组箱线图(boxplot) 加载R包 library(ggpubr) library(ggplot2) library(tidyverse) # dev…

Hadoop - MapReduce编程

文章目录 前言一、创建mapreduce-demo项目1. 在idea上创建maven项目2. 导入hadoop相关依赖 二、MapReduce编程1. 相关介绍1.1 驱动类(Driver Class)1.1.1 驱动类的定义1.1.2 驱动类的功能1.1.3 驱动类的作用 1.2 Mapper1.2.1 Mapper 的定义1.2.2 Mapper …

原码的乘法运算>>>只有0,1

MQ : 乘数 X : 被乘数 ACC : 乘积高位 [当前位是1,加上被乘数; 当前位是 0,加上0] 例如: MQ的最低位是1,所以要加上被乘数(01101) >>>> 得出 01101 >>>>> ACC MQ 需要整体逻辑右移 (原本01101 01011 >>> 001101 0101) 现在的次低位是…

mapbox基础,style样式汇总,持续更新

👨‍⚕️ 主页: gis分享者 👨‍⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅! 👨‍⚕️ 收录于专栏:mapbox 从入门到精通 文章目录 一、🍀前言二、🍀根属性2.1 so…

人工智能知识分享第九天-机器学习_集成学习

集成学习 概念 集成学习是机器学习中的一种思想,它通过多个模型的组合形成一个精度更高的模型,参与组合的模型称为弱学习器(基学习器)。训练时,使用训练集依次训练出这些弱学习器,对未知的样本进行预测时…

页面滚动下拉时,元素变为fixed浮动,上拉到顶部时恢复原状,js代码以视频示例

页面滚动下拉时,元素变为fixed浮动js代码 以视频示例 <style>video{width:100%;height:auto}.div2,#float1{position:fixed;_position:absolute;top:45px;right:0; z-index:250;}button{float:right;display:block;margin:5px} </style><section id"abou…

排序算法——堆排序

什么是堆 堆就是一种特殊的二叉树&#xff0c;他有以下特点&#xff1a; 堆中某个节点的值总是不大于或不小于其父节点的值&#xff1b; 堆总是一棵完全二叉树。 堆又可以分为大根堆和小根堆 大根堆&#xff1a;根节点最大&#xff0c;每个节点都小于或等于父节点 小跟堆&am…

K-means算法在无监督学习中的应用

K-means算法在无监督学习中的应用 K-means算法是一种典型的无监督学习算法&#xff0c;广泛用于聚类分析。在无监督学习中&#xff0c;模型并不依赖于标签数据&#xff0c;而是根据输入数据的特征进行分组。K-means的目标是将数据集分成K个簇&#xff0c;使得同一簇内的数据点…

Linux 35.6 + JetPack v5.1.4之 pytorch升级

Linux 35.6 JetPack v5.1.4之 pytorch升级 1. 源由2. 升级步骤1&#xff1a;获取二进制版本步骤2&#xff1a;安装二进制版本步骤3&#xff1a;获取torchvision步骤4&#xff1a;安装torchvision步骤5&#xff1a;检查安装版本 3. 使用4. 补充4.1 torchvision版本问题4.2 支持…

Spring——自动装配

假设一个场景&#xff1a; 一个人&#xff08;Person&#xff09;有一条狗&#xff08;Dog&#xff09;和一只猫(Cat)&#xff0c;狗和猫都会叫&#xff0c;狗叫是“汪汪”&#xff0c;猫叫是“喵喵”&#xff0c;同时人还有一个自己的名字。 将上述场景 抽象出三个实体类&…

TCP与DNS的报文分析

场景拓扑&#xff1a; 核心路由配置&#xff1a; 上&#xff08;DNS&#xff09;&#xff1a;10.1.1.1/24 下(WEB)&#xff1a;20.1.1.1/24 左&#xff08;client&#xff09;&#xff1a;192.168.0.1/24 右(PC3)&#xff1a;192.168.1.1/24Clint2配置&a…

PWR-STM32电源控制

一、原理 睡眠模式不响应其他操作&#xff0c;比如烧写程序&#xff0c;烧写时按住复位键松手即可下载&#xff0c;在禁用JTAG也可如此烧写程序。 对于低功耗模式可以通过RTC唤醒、外部中断唤醒、中断唤醒。 1、电源框图&#xff1a; VDDA主要负责模拟部分的供电、Vref和Vref-…

WebSocket 测试入门篇

Websocket 是一种用于 H5 浏览器的实时通讯协议&#xff0c;可以做到数据的实时推送&#xff0c;可适用于广泛的工作环境&#xff0c;例如客服系统、物联网数据传输系统&#xff0c; 基础介绍 我们平常接触最多的是 http 协议的接口&#xff0c;http 协议是请求与响应的模式&…

基于机器学习的故障诊断(入门向)

一、原始信号的特征提取 1.EMD经验模态分解的作用 信号分析&#xff1a;EMD可以将信号分解为多个IMFs&#xff0c;每个IMF代表信号中的一个特定频率和幅度调制的成分。这使得EMD能够提供对信号的时频特征进行分析的能力&#xff08;特征提取用到的&#xff09;。信号去噪&…

【算法刷题】leetcode hot 100 双指针

文章目录 283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水 283. 移动零 https://leetcode.cn/problems/move-zeroes/description/?envTypestudy-plan-v2&envIdtop-100-liked 解法一&#xff1a; 找到第一个等于0的下标&#xff0c;然后继续向右找到第一个不等于0的…