提升 React 应用的安全性:从这几点入手

react框架安全设计 React库在过去有一些严重性很高的漏洞,因此最好保持稳定版中的最新版本。避免没有经过自定义验证的动态HTML attributes值。 阅读详情

我报名参加金石计划1期挑战——瓜分10万奖池,这是我的第2篇文章,点击查看活动详情

React 的安全漏洞

目前的网络环境,共享的数据要比以往任何时候都多,对于用户而言,必须注意在使用应用程序中可能遇到的相关风险。

虽然 React 方便快捷,但这也使得它容易发生风险,并且很容易忽略安全问题。

尽管 React 的攻击数量比其他框架少,但它仍然不是完全安全的。 我们发现由于 React 与其他开源组件兼容并且没有强大的默认安全设置,因此它容易受到安全漏洞的影响。下面我们列举了一些 React 应用常见的安全问题。

React 应用最常见的安全问题

由于 React 一直在更新和改进,因此我无法在此处创建详尽的漏洞列表。 但我会在这里讨论一些知名和常见的安全问题。

1. 跨站脚本(XSS)

XSS 是一个严重的客户端漏洞。 攻击者能够将一些恶意代码添加到你的程序中,这些代码被解析并作为应用程序的一部分执行。 这会导致损害应用程序的功能和用户数据。

有两种跨站点脚本攻击类型:

1.反射型 XSS——攻击者使用恶意链接和浏览器处理的一些 JS 代码来访问和操纵页面内容、cookie 和其他重要的用户数据。2.存储型 XSS——在这种攻击中,恶意内容存储在服务器上,并在用户请求存储数据时执行。 这会导致你的网页上出现你不想看到的内容。2. 认证授权问题

React.js 应用程序中的另一个常见问题是授权不足或授权不佳。 这可能导致攻击者破解用户凭据并进行暴力攻击

例如会话 ID 暴露在 URL 中、攻击者发现的简单且可预测的登录详细信息凭据的未加密传输注销后保持有效会话以及其他与会话相关的因素,都是与授权相关的各种风险,

3. SQL 注入

此漏洞会暴露你的应用程序的数据库。 攻击者注入有害的 SQL 代码,允许他们在未经许可的情况下修改数据。

例如,黑客可以访问你应用的所有数据、创建虚假 ID,甚至获得管理员权限。

4. XML 外部实体攻击 (XXE)

XXE 攻击是指攻击者针对将 XML 转换为可读代码所需的 XML 解析器。

恶意代码被注入解析器以收集敏感数据,甚至尝试进行 CSRF(跨站请求伪造)和 DDoS(分布式拒绝服务)攻击。

5. Zip Slip

React 应用程序中有一个非常特殊的漏洞,称为 “zip slip”,它涉及利用允许上传 zip 文件的功能进行攻击。

如果用于解压缩 zip 文件的存档不安全,则攻击者可以将上传的文件解压缩到指定目录之外,然后他们可以访问该文件

6. 任意代码执行

这种威胁是一种普遍的风险,它使攻击者能够在你的应用程序的某些进程上执行任意命令。

这些随机命令很危险,因为它们可以更改你的配置文件或代码的任何部分。

目前,我们知道了可能出现的问题,接下来,让我们看看如何防范这些问题。

React 应用安全的最佳实践

正如他们所说,一盎司的预防胜于一磅的治疗——因此遵循适当的协议并确保你的应用程序是安全的始终是一个好主意。

你可能不会考虑所有可能的漏洞,但你绝对可以通过减轻最常见的风险来使你的应用程序更安全。

以下是你应该遵循的一些最佳实践来保护你的 React 应用程序:

1. 基本身份验证

应用安全性的一个基本但重要的原则是确保服务器和客户端之间的连接是安全的

构建应用程序时执行此操作的一种简单方法是确保 domain header 具有 realm 属性realm 包含有效用户列表,并在访问任何受限数据时提示输入用户名和密码

以下是如何设置 security-realm 的示例:

<security-realm name="ApplicationRealm"><authentication><local default-user="$local" allowed-users="comma-separated-list"/><properties path="application-users.properties"/></authentication><authorization><properties path="application-roles.properties"/></authorization>
</security-realm> 

如果可能,另一种简单有效的技术是使用多重身份验证。 这种身份验证方法可确保用户只有在提供两个或更多身份验证凭据以验证其身份后才能获得对应用程序重要部分的访问权限。

要遵循的另一个基本规则是,对于每次新登录,你应该始终使用安全的服务器会话管理器创建一个新会话 ID。

当你的 React 应用设置了基本的安全身份验证时,它有助于缓解 XSS 和损坏的身份验证问题。

2. 确保 HTML 代码具有健壮性

任何 React 应用程序都需要 HTML 来呈现它,因此必须确保你的 HTML 代码不会受到攻击。 三种建设性的方法是:

A. 禁用 HTML 标记

当为任何 HTML 元素设置了“禁用”属性时,它变得不可变无法使用表单聚焦或提交该元素。

然后,你可以进行一些验证并仅在该验证为真时启用该元素。 这可以防止提交任何可能导致灾难性影响的恶意数据

这是禁用按钮的示例代码片段:

const Component = React.createClass({
	getInitialState() {	return {	submitting: true}},handleSubmit() {},render() {	return (<div>	<button type="button" disabled={this.state.submitting} onClick={ this.handleSubmit }>Submit</button>}
});
 
ReactDOM.render(
	<Component />,document.getElementById('container')
); 

B. 使用转义字符

JavaScript XML (JSX) 是一种语法,可让你在 React 中编写 HTML。 它具有内置的自动转义功能,你可以使用它来保护你的应用程序。

如果你默认使用花括号 {} 绑定数据,那么 React 将自动转义不属于绑定数据的值。

这是一个例子:

return (<p style={{color: myAppColor}}>{myAppRating}</p>); 

如果黑客试图在变量 myAppColor 中注入额外的代码,例如 color: purple, background-color: pink,那么 JSX 解析器将检测到这个无效的 CSS 输入。 因此,额外的数据将被转义,攻击将被中和。

C. 使用 dangerouslySetInnerHTML 并清理HTML

你的应用程序可能需要呈现动态 HTML 代码,例如用户提供的数据。 如果这是使用 “innerHTML” 完成的,那么这会使应用程序容易受到恶意数据的攻击。

React 有一个功能可以通知你这个潜在的漏洞,称为 dangerouslySetInnerHTML 属性。 使用它,你可以检查并确保在此属性存在时输入的数据来自受信任的来源。

return (<p dangerouslySetInnerHTML={{__html: myAppReview}}></p>); 

你还可以使用 DOMPurify 等库来扫描用户输入并删除恶意内容。

// Import DOMPurify
const DOMPurify = require('dompurify')(window);
// 删除恶意内容
return (<p dangerouslySetInnerHTML={{__html: myAppReview}}></p>); 

现在,假设攻击者在图像中添加了 “onerror” 代码,如下所示:

该应用程序<b>强大</b>且<i>有趣。</i>
<img src="reviewPic.png" onerror="alert('This app is not good!');" /> 

净化后的值将导致以下结果:

该应用程序<b>强大</b>且<i>有趣。</i>
<img src="reviewPic.png"> 

所有这些措施都可以保护你的 React 应用程序免受 XSS 和任意代码执行等攻击。

3. URL解析时使用白名单/黑名单和验证

使用锚标记 <a> 和 URL 链接内容时,你需要非常小心攻击者添加以 JavaScript 为前缀的有效负载。

为避免基于 URL 的恶意脚本注入,请始终使用 HTTP 或 HTTPS 协议验证 URL。

function validateURL(url) {
	const parsed = new URL(url)
	return ['https:', 'http:'].includes(parsed.protocol)
}
<a href={validateURL(url) ? url : ''}>This is a link!</a> 

保护 React 应用程序的另一种方法是使用允许列表/阻止列表方法白名单是指你拥有所有安全且允许访问的链接的列表,而黑名单则是拥有在请求访问时将被阻止的所有潜在威胁的列表。

很难跟踪所有可能的有害链接,因此一个好的做法是将已知站点列入白名单并阻止其他所有内容。

URL 验证有助于防止身份验证失败、XSS、任意代码执行和 SQL 注入。

4. 允许连接任何数据库时始终使用最小权限原则

在你的 React 应用程序中,始终使用最小权限原则。 这意味着必须允许每个用户和进程仅访问对其目的绝对必要的信息和资源。

在连接到应用程序的数据库时允许任何人更新、插入或删除是很危险的,因此为不同的用户分配正确的数据库角色非常重要。

除非至关重要,否则切勿将应用程序数据库的管理员权限授予任何人。 这使你的应用程序更安全,更不容易受到 SQL 注入攻击。

5. 保护你的 API

React API 的优点和缺点在于它们允许你的应用程序和其他服务之间的连接。 这些可以存储信息甚至执行命令。 这会将你的应用程序暴露给 XSS 和 SQL 注入。

针对此漏洞的一种强大的缓解技术是验证所有 API 函数的 API 模式。 此外,安排及时的模式验证并为所有交互使用 SSL/TLS 加密。

为了增加安全性,通过 API 传输数据时,请使用良性字符而不是 <

window.__PRELOADED_STATE__ = ${JSON.stringify(preloadedState).replace( /</g, '\\u003c')} 

6. 实施 Web 应用程序防火墙 (WAF)

WAF 是一种应用程序过滤器,通过监控、分析和过滤双向流量来检测和阻止恶意内容。

你可以通过三种方式实现 Web 应用程序防火墙:

1.硬件级别的基于网络的防火墙。
2.集成到软件中的基于主机的防火墙。
3.基于云的 WAF

WAF 基于签名的过滤在对抗 SQL 注入、XSS、任意代码执行和 zip 滑动方面非常有效。

7.设置适当的文件管理

在你的 React 应用程序中,你应该始终遵循正确的文件管理实践,以避免 zip slip 和其他类似风险。

1.确认文件名是标准的并且没有任何特殊字符。
2.每当文件以 zip 格式上传时,请务必在提取和使用文件之前重命名它们。
3.将单个组件的所有文件一起存储在一个文件夹中,以便快速发现任何可疑文件

8.永远不要序列化敏感数据

你的 React 应用程序很有可能使用 JSON 来设置应用程序的初始状态。

这可能具有潜在危险,因为 JSON.stringify()一个将任何数据转换为字符串而不检测恶意值的函数。 攻击者可以通过注入可以修改有效数据的 JS 对象来操纵用户名和密码等数据。

<script>window.__STATE__ = ${JSON.stringify({ data })}</script> 

你可以使用 serialize-javascript NPM 模块来转义呈现的 JSON,也可以使用复杂的 JSON 格式来避免序列化。 但防止任何意外的最好方法是从序列化表单中省略机密数据。

结尾

在创建 React 应用程序时,你必须考虑许多潜在威胁。 如果没有适当的安全性,你的应用程序可能会成为网络攻击的受害者,这可能导致经济损失、浪费时间、违反信任和法律问题。

随着每天都有新的威胁出现,攻击者利用越来越多的漏洞,使你的 React 应用程序安全可能非常复杂和困难。

你可以聘请专门从事安全性的 React 开发人员,也可以将开发外包给专门开发 React 应用程序的软件开发公司。 总之,在安全方面,请确保你身边有专家!## 最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。

因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。

干货主要有:

①1000+CTF历届题库(主流和经典的应该都有了)

②CTF技术文档(最全中文版)

③项目源码(四五十个有趣且经典的练手项目及源码)

④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)

⑤ 网络安全学习路线图(告别不入流的学习)

⑥ CTF/渗透测试工具镜像文件大全

⑦ 2023密码学/隐身术/PWN技术手册大全

如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!

扫码领取

YOLOv8改进 | 特殊场景检测篇 | 最新的多尺度特征提取DICAM(全网独家首发,增强水下图像的质量) 本文给大家带来的最新改进机制是多尺度特征提取和通道注意力机制DICAM,深度Inception和通道注意力模块(DICAM)主要用于用于增强水下图像的质量、对比度和色偏。所提出的DICAM模型考虑了水下图像的比例退化和不均匀色偏,从而提高图像的质量。通过在两个公开的水下图像增强数据集上的广泛实验,验证了提出的模型在全参考和无参考图像质量评估指标方面。欢迎大家订阅我的专栏一起学习YOLO,购买专栏读者联系读者入群获取进阶项目文件! 阅读详情

相关推荐

coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?

🏆本文收录于《CSDN问答解惑-专业版》专栏,主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!

**My Coding Family** 2632

推荐书籍《低代码平台开发实践:基于React》—— 提升开发效率,构建优质应用

随着数字化转型的深入,企业对应用开发效率和灵活性的要求不断提高。低代码平台作为新兴的软件开发方式,通过可视化界面和预构建组件,极大简化了应用开发流程,降低了技术门槛。基于React的低代码平台以其组件化、响应式和数据驱动等特性,成为当前流行的低代码开发选择。

唯有努力,方可自信! 1万+

ReactJS基础挑战:TypeScript的应用

本文还有配套的精品资源,点击获取 简介:本项目是一个名为"gostack-desafio-fundamentos-reactjs"的挑战性学习项目,涵盖了ReactJS基础知识、TypeScript编程语言在React开发中的应用,以及React组件的创建和状态管理。学习者将通过实战掌握从基本组件编写到复杂应用开发的全过程,同时利用TypeScript的类型系统来提升代码质...

weixin_35706255的博客 938

一些 React 项目中可能存在的安全隐患

公司要求完成一系列的安全课程(Security),其中正好有 React 相关的,就上完了这个课,并且发现了以前一些漏掉的问题,在此总结一下。

GoldenaArcher的博客 2224

高危预警!React核心组件曝CVSS 9.8漏洞,数百万开发者面临远程代码执行风险

React Native高危漏洞CVE-2025-11953曝光:全球开发环境面临远程代码执行风险。该漏洞存在于@react-native-community/cli-server-api组件中,CVSS评分9.8,影响4.8.0至20.0.0-alpha.2版本,每周下载量超200万次。攻击者无需认证即可通过网络访问触发漏洞,可能控制开发设备、窃取代码。建议立即升级至20.0.0+版本或通过限制服务器访问权限进行应急缓解。JFrog强调需加强开发环境安全防护,建立长期依赖管理机制,包括定期审计、输入净化和

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1209

网络安全漏洞之React 框架分析

昨日爆出的 CVE-2025-55182,CVSS 10.0 满分严重漏洞,影响 React 19 及所有 Next.js 15/16 项目。核心问题React Server Components 的 Flight 协议存在不安全反序列化,无需任何认证,攻击者只需向 Server Actions 端点发送一个精心构造的 multipart 请求,即可实现远程代码执行(RCE)。目前已确认多个完整 0day 利用链(包括 vm.runInThisContext 在内),未修补实例基本等于已失陷。

anquan2233的博客 1779

如何快速提升React应用的类型安全性react-immutable-proptypes完整指南

react-immutable-proptypes是一个专为React应用设计的PropType验证工具,它能够与Immutable.js完美配合,帮助开发者在开发过程中捕获类型错误,提升应用的稳定性和可维护性。无论是处理列表、映射还是其他复杂数据结构,这个工具都能提供简洁而强大的类型验证方案。 ## 为什么选择react-immutable-proptypes? 在React开发中,使用Im

gitblog_00608的博客 712

Ecommerce-Reactjs:构建全栈电商应用的利器

Ecommerce-Reactjs:构建全栈电商应用的利器 项目介绍 Ecommerce-Reactjs 是一个功能完善的全栈电商平台,采用前端技术 Reactjs、Redux、Axios、Sass 和 react-bootstrap,以及后端技术 Node.js、Express、Restful API、paypal-sdk、mongodb、mongoose、jwt(jsonwebtoken)、h...

gitblog_00619的博客 902

如何在React表单中集成Turnstile:提升安全性的完整指南

React Turnstile是Cloudflare Turnstile在React应用中的集成方案,提供了轻量级、注重隐私的验证码替代方案,支持自动脚本注入、TypeScript类型定义和SSR兼容性。本指南将帮助你快速在React表单中集成Turnstile,有效防范机器人攻击,同时保持良好的用户体验。 ## 为什么选择React Turnstile? 传统的验证码解决方案往往给用户带来不

gitblog_00136的博客 388

提升React Native应用体验:使用react-native-cookies优化用户认证流程

react-native-cookies是一款专为React Native开发的Cookie管理工具,能够帮助开发者轻松处理应用中的Cookie存储、获取和清除等操作,有效优化用户认证流程,提升应用体验。 ## 为什么选择react-native-cookies? 在React Native应用开发中,用户认证是一个关键环节。传统的认证方式往往需要手动处理Cookie,不仅繁琐,还容易出现安全

gitblog_00892的博客 386

漏洞分析 | CVE-2025-29927:Next.js 中间件授权绕过

Next.js 是由 Vercel 开发的广受欢迎的 React 框架,它凭借无缝集成的服务器端渲染、静态生成和强大的中间件系统,驱动着数百万个 Web 应用程序。然而,在 2025 年 3 月,一个关键漏洞 CVE-2025-29927 震撼了整个生态系统。该漏洞暴露了一个缺陷,使攻击者能够轻易绕过基于中间件的安全控制。该问题安全研究员 Rachid Allam(又名 zhero)发现,突显了 Next.js 中间件的强大与风险。让我们深入探讨该漏洞的技术细节、其工作原理以及对开发者的影响。

zkaqlaoniao的博客 969

react-scripts:5.0.1漏洞解决

本文主要记录在解决react-scripts5.0.1版本的安全漏洞的过程中,怎么排查,以及怎么解决的过程,以及记录了中间用到的npm 指令

qq_42327090的博客 1991

React Router和Remix中的CVE-2025-31137漏洞详解与修复指南

CVE-2025-31137是一个影响React Router(7.0.0到7.4.0版本)和Remix框架(2.11.1到2.16.2版本)中Express适配器的安全漏洞。该漏洞允许攻击者通过伪造HTTP请求头中的Host或字段,插入恶意的URL路径,从而操控请求的URL,导致未授权的重定向或访问敏感资源CVE-2025-31137是React Router和Remix Express适配器中的高危URL路径注入漏洞。漏洞利用了Host和请求头中端口部分未校验的缺陷。

W11929311582的博客 945

React重大安全漏洞:服务器代码或被远程操控

近期发现了一个严重的安全漏洞 CVE-2025-55182,影响 React 19 及其相关框架(如 Next.js)。该漏洞允许攻击者通过不安全的反序列化在服务器上执行任意代码。Wiz 安全研究数据显示,39% 的云环境存在此漏洞。安全团队应立即升级 React 及相关依赖,以确保系统安全

feihanim的博客 1234

react 项目中预防xss攻击的插件 dompurify

【代码】react 项目中预防xss攻击的插件 dompurify。

weixin_42289080的博客 1283

利用脚本注入漏洞攻击ReactJS应用程序

ReactJS是一款能够帮助开发者构建用户接口的热门JavaScript库。在它的帮助下,开发者可以构建出内容丰富的客户端或Web应用,并且提前加载内容以提供更好的用户体验。 从设计角度来看,只要你能够按照开发标准来使用ReactJS的话,它其实是非常安全的。但是在网络安全领域中,没有任何东西是绝对安全的,而错误的编程实践方式将导致类似脚本注入漏洞之类...

weixin_33827590的博客 705

最新系统漏洞--React Native拒绝服务漏洞

最新系统漏洞2021年7月15日 受影响系统: React Native React Native 0.59.0 描述: CVE(CAN) ID: CVE-2020-1920 React Native将原生开发的最佳部分与React相结合,致力于成为构建用户界面的顶尖JavaScript框架React Native 0.59.0版本的validateBaseUrl函数存在拒绝服务漏洞。攻击者可利用该漏洞导致应用程序响应迟钝或崩溃。 <**> 建议: 厂商补丁: React Native 目前

weixin_48555088的博客 1013

Q_GDW 12301-2024 变电站硬压板在线监测技术规范.docx

Q_GDW 12301-2024 变电站硬压板在线监测技术规范.docx

上一篇: 腾讯海量存储与CDN的自动化运维
下一篇: 提升云计算安全的五个策略
程序员负总裁
博客等级 码龄4年 1万+粉丝 2077原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值