前端安全防护实战:XSS、CSRF防御与同源策略详解(react 案例)

前端安全防护实战中,主要涉及三个方面:XSS (Cross-Site Scripting) 攻击的防御、CSRF (Cross-Site Request Forgery) 攻击的防御,以及浏览器的同源策略。以下是这三个方面的详细说明:

XSS 防御详解

XSS 概述

XSS攻击是一种让攻击者能够在受害者的浏览器中注入恶意脚本的攻击方式,这些脚本通常会窃取用户的敏感信息,如Cookie、session token等,甚至控制用户的账户权限。

防御措施
  1. 输入过滤与转义:对用户提交的所有数据进行严格的检查与转义,确保在HTML、JavaScript、CSS上下文中不会被执行。例如,使用textContent代替innerHTML,或者使用相应的转义函数如encodeURIComponent()encodeURI()以及专门为HTML、JS、CSS设计的安全函数进行输出编码。

  2. Content Security Policy (CSP):设置响应头中的Content-Security-Policy,限制页面只能加载指定来源的脚本、样式和图片,有效防止外部注入的恶意内容被执行。

  3. HttpOnly Cookie:对于包含敏感信息的Cookie,设置HttpOnly属性,使其不能通过JavaScript被访问,这样即使存在XSS漏洞,攻击者也无法直接盗取这类Cookie。

  4. 框架提供的安全API:利用现代框架提供的安全API,如在Vue、React等框架中,可以通过它们的安全DOM操作方法来避免XSS风险。

CSRF 防御详解

CSRF 概述

CSRF攻击是指攻击者通过诱使用户在其已登录的可信网站上执行恶意操作,利用用户的认证状态发起非授权请求。

防御措施
  1. Token验证:在重要请求中加入CSRF Token,服务器端在渲染表单时生成一个随机Token,并将其存储在服务器端或客户端(如Cookie中)。当接收到请求时,服务器验证Token的一致性。

  2. 双重Cookie验证:服务器在接收POST请求时,不仅验证CSRF Token,还要求另一个只有浏览器才能自动附带的Cookie(如Session ID),由于浏览器同源策略,攻击者无法在第三方站点伪造这个Cookie。

  3. SameSite Cookie属性:设置Cookie的SameSite属性为strictlax,这可以防止第三方网站在跨域请求中携带该Cookie。

同源策略详解

同源策略概述

同源策略是浏览器的一个核心安全模型,它规定了来自不同源(协议、域名、端口任一不同即视为不同源)的文档或脚本之间不能相互读写数据,以此隔离潜在的安全风险。

同源策略的应用与例外
  • 应用:浏览器默认阻止非同源资源之间的交互,如不同源的脚本不能读取对方的DOM、Cookie等。
  • 例外:现代浏览器允许通过CORS(Cross-Origin Resource Sharing)机制实现跨域资源共享,通过设置特定的HTTP头部,允许服务器明确声明哪些其他源可以访问资源。

综上所述,全面的前端安全防护需要综合运用多种手段,包括但不限于上述的XSS防御、CSRF防御策略以及对同源策略的合理利用和管理。同时,持续关注并遵循最新的安全最佳实践也至关重要。

在React中实现XSS和CSRF防御的例子:

XSS防御实例 - 使用 dangerouslySetInnerHTML 时转义用户输入

import React from 'react';function escapeHtml(text) {const map = {'&': '&amp;','<': '&lt;','>': '&gt;','"': '&quot;',"'": '&#39;','/': '&#x2F;'};return text.replace(/[&<>"'/]/g, (char) => map[char]);
}class UserComment extends React.Component {render() {const { comment } = this.props;// 对用户评论内容进行转义const safeComment = {__html: escapeHtml(comment)};return (<div dangerouslySetInnerHTML={safeComment} />);}
}// 使用组件
<UserComment comment={`User's untrusted input...`} />

CSRF防御实例 - 使用CSRF Token

假设后端已经提供了CSRF Token,我们将其存放在localStorage或Cookie中,并在每个非GET请求中带上这个Token。

import axios from 'axios';
import { useEffect, useState } from 'react';function useCsrfToken() {const [csrfToken, setCsrfToken] = useState(null);useEffect(() => {// 假设从localStorage获取Tokenconst storedToken = localStorage.getItem('csrfToken');if (storedToken) {setCsrfToken(storedToken);}// 在实际应用中,可能需要在登录成功后由后端提供并保存到localStorage}, []);function sendSafeRequest(method, url, data = null) {// 添加CSRF Token到请求头const headers = {'X-CSRF-Token': csrfToken,};return axios.request({method,url,data,headers,});}return { csrfToken, sendSafeRequest };
}function MyComponentThatMakesRequests() {const { csrfToken, sendSafeRequest } = useCsrfToken();async function handleSubmit(data) {try {const response = await sendSafeRequest('POST', '/api/protected-endpoint', data);// 处理响应...} catch (error) {// 处理错误...}}// ...
}

以上代码仅为示例,实际应用中需要根据项目的实际情况调整。比如CSRF Token的获取途径可能是从Cookie中带有HttpOnly标志的Token派生出来的,或者是通过初始接口请求获得并缓存起来的。另外,上面的sendSafeRequest只是一个简单的封装,真实场景下可能还需要处理更多复杂的网络交互逻辑。

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

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

相关文章

科创板门槛升级!解析中国量子企业的上市之路与国际比拼

4月30日晚&#xff0c;中国证监会于发布了修订后的《科创属性评价指引&#xff08;试行&#xff09;》&#xff08;以下简称“新指引”&#xff09;&#xff0c;该指引自发布日起正式生效。本次修订对原有指引中的部分标准进行了调整&#xff0c;具体如下&#xff1a; 1&#x…

如何用Kimi,5秒1步生成流程图

引言 在当前快节奏的工作环境中&#xff0c;拥有快速、专业且高效的工具不可或缺。 Kimi不仅能在5秒内生成专业的流程图&#xff08;kimi&#xff09;&#xff0c;还允许实时编辑和预览&#xff0c;大幅简化了传统流程图的制作过程。 这种迅速的生成能力和高度的可定制性使得…

有哪些方法可以在运行时动态生成一个Java类?

使用 Java 反射 API&#x1f6a9;&#xff1a; Java 的反射 API 允许在运行时查询和操作类和对象。虽然反射 API 本身不直接提供生成新类的功能&#xff0c;但可以用于动态调用构造函数、方法和访问字段&#xff0c;这在某些情况下可以作为动态生成类的一部分。 字节码操作库&…

Day28:ElasticSearch入门、Spring整合ES、开发社区搜索功能

ElasticSearch入门 Elasticsearch简介 一个分布式的、Restful风格的搜索引擎。支持对各种类型的数据的检索&#xff08;非结构化的也可以&#xff09;。搜索速度快&#xff0c;可以提供实时的搜索服务。便于水平扩展&#xff08;集群式部署&#xff09;&#xff0c;每秒可以处…

一文读懂计算机视觉4大任务:分类任务、检测任务、目标分割任务、关键点检测任务

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…

算法系列--多源BFS问题

&#x1f495;"对相爱的人来说&#xff0c;对方的心意&#xff0c;才是最好的房子。"&#x1f495; 作者&#xff1a;Lvzi 文章主要内容&#xff1a;算法系列–多源BFS问题 大家好,今天为大家带来的是算法系列--多源BFS问题 前言: 之前我们已经学习过单源的最短路问…

【Toritoise SVN】SVN 怎么忽略文件夹下的所有文件但是不忽略文件夹本身

比如&#xff1a;忽略 Assets\StreamingAssets\LocalAsset文件夹下的所有文件但是不忽略LocalAsset这个文件夹 在TortoiseSVN中&#xff0c;你可以通过以下步骤来修改文件夹的svn:ignore属性&#xff1a; 打开Windows资源管理器&#xff0c;导航到你的工作副本中的Assets\Stre…

VMware虚拟机问题解决方案

1、运行虚拟机系统蓝屏 可能的原因有两个: 1). 虚拟机所在磁盘的空间不足 ; -------> 清理磁盘空间 。 2). 操作系统版本高, 需要适配新版本的Vmware ; ------> 卸载Vmware15版本, 安装Vmware16版本 。 2、卸载VMware的步骤 1&#xff09;卸载已经安装的VMware 从控制面…

springboot集成异步调用

异步、同步 同步&#xff1a;在发出一个调用时&#xff0c;在得到调用结果之前&#xff0c;该调用不返回&#xff08;实时处理&#xff09;。----不相干的业务逻辑会阻塞一些核心的业务逻辑。 异步&#xff1a;在发出一个调用时&#xff0c;这个调用立刻返回&#xff0c;没有返…

8G防火墙,WAF防火墙,可抵御各种恶意请求、恶意机器人、攻击防御

8G防火墙&#xff0c;WAF防火墙&#xff0c;可抵御各种恶意请求、恶意机器人、攻击防御 经过一年多的 beta 测试&#xff0c;8G 防火墙已准备好在生产现场使用。因此&#xff0c;您可以受益于 nG 防火墙&#xff08;又名 nG 黑名单&#xff09;的最新发展提供的强大保护。8G 防…

源代码防泄露可以通过哪些方法实现?七种有效方法分享

在当今数字化时代&#xff0c;访问安全和数据安全成为企业面临的重要挑战。传统的边界防御已经无法满足日益复杂的内网办公环境&#xff0c;层出不穷的攻击手段已经让市场单一的防御手段黔驴技穷。当企业面临越来越复杂的网络威胁和数据泄密风险时&#xff0c;更需要一种综合的…

iOS审核被拒 无法添加以供审核 要开始审核流程,必须提供以下项目

iOS审核被拒 最近有小伙伴反馈上架被拒&#xff0c;提示如下&#xff1a; 无法添加以供审核 要开始审核流程&#xff0c;必须提供以下项目 提交以供审核时遇到意外错误。如果问题仍然存在&#xff0c;请联系我们 后来小伙伴解决方案是&#xff1a;把备案号大写改为小写。 竟…

Ansible自动化工具模块调用与playbook编写

目录 一、Ansible工作机制与特点 &#xff08;一&#xff09;Ansible工作机制 1. 初始化与配置 2. 编写Playbook 3. 调用模块 4. 加密敏感数据 5. 执行Playbook 6. 收集执行结果 7. 错误处理与回滚 8. 反馈与报告 &#xff08;二&#xff09;Ansible 的主要特点包括…

Java并发编程: Synchronized锁升级

文章目录 一、jdk8 markword实现表二、使用工具来查看锁升级 一、jdk8 markword实现表 new -> 偏向锁 -> 轻量级锁&#xff08;自旋锁、自适应自旋锁&#xff09;-> 重量级锁&#xff1a; 偏向锁和轻量级锁都是用户空间完成的。重量级锁是需要向内核申请的。 synchr…

深度学习之基于Matlab神经网络的活体人脸和视频人脸识别系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 人脸识别技术作为生物识别技术的一种&#xff0c;近年来得到了广泛的关注和应用。与传统的身份认证方…

高素质高学历婚恋相亲交友平台有哪些?分享我的网上找对象成功脱单经历!

尽管觉得在社交软件上找到真爱的可能性很小&#xff0c;但我却时常看到别人成功的案例&#xff0c;这也让我跃跃欲试了。没想到&#xff0c;我真的成功了&#xff01;以下是我亲身使用过的一些方法&#xff0c;在此与大家分享&#xff0c;仅供参考哦&#xff01; &#x1f449;…

新手做抖音小店多久能出单?新手抖音小店出单秘籍!出单教程必看

大家好&#xff0c;我是电商花花。 现阶段还是有很多朋友加入到抖音电商行业&#xff0c;因为抖音小店上还隐藏很多的红利和市场&#xff0c;很多新手开店后第一个问题就是&#xff0c;店铺开通后&#xff0c;一般多久能出单&#xff1f; 多久能出单&#xff0c;其实更看重的…

解决方案:应对文本数据超限处理的有效策略

在处理大规模文本数据时&#xff0c;经常会遇到数据量超出系统、软件或工具处理能力上限的挑战。这不仅影响处理速度&#xff0c;还可能导致系统崩溃或性能严重下降。为了有效应对这一问题&#xff0c;本文汇总了几种实用的策略&#xff0c;帮助开发者和数据处理专业人员高效管…

深入学习和理解Django视图层:处理请求与响应

title: 深入学习和理解Django视图层&#xff1a;处理请求与响应 date: 2024/5/4 17:47:55 updated: 2024/5/4 17:47:55 categories: 后端开发 tags: Django请求处理响应生成模板渲染表单处理中间件异常处理 第一章&#xff1a;Django框架概述 1.1 什么是Django&#xff1f;…

获取波形极值与间距并显示

获取并显示波形的极值与极值间距 1、流程 1、通过signal.find_peaks获取极大值 2、获取极大值下标 3、获取极大值对应的值 4、获取极大值的下标间距(就是隔多远有一个极大值) 5、获取极大值间距的标准差、方差、均值、最大值 6、图形展示波形图并标记极大值2、效果图 3、示…