首页/新闻资讯/正文详情

XSS 攻击与防御

发布时间:2026/11/4 2:35:15 来源:云帆数科 栏目:资讯中心
XSS 攻击与防御
10.1 XSS 攻击与防御XSS 的本质可以类比为在网页里混入一段不受信任的剧本浏览器无法区分脚本是业务本身的代码还是攻击者注入的内容会直接解析执行窃取数据、劫持页面、诱导跳转。10.1.1 XSS 分类反射型、存储型、DOM 型XSS跨站脚本攻击是攻击者向页面注入恶意脚本在用户浏览器中执行以此窃取会话、篡改页面、发起请求的一类前端注入攻击。XSS 类型触发链路数据来源风险持久度典型识别特征反射型 XSS恶意参数随URL传给后端后端直接拼入页面返回URL 查询参数一次性链接失效即失效需要诱导用户点开特制链接存储型 XSS恶意内容提交到服务器持久存储其他用户访问页面时加载渲染评论、留言、帖子等入库内容持久存在所有访问者都会中招危害最大属于蠕虫式风险DOM型 XSS完全在前端JS内处理不经过后端返回恶意HTML前端脚本读取URL、hash等数据直接操作DOMlocation.hash、search、localStorage等前端变量取决于页面逻辑后端不感知攻击抓包看响应体无恶意代码!-- 不安全示例直接拼接用户输入到DOMDOM型XSS漏洞 -- div idtip/div script const userInput new URLSearchParams(location.search).get(msg); /* 漏洞innerHTML会解析标签与脚本输入 scriptalert(xss)/script 就会执行 */ // document.getElementById(tip).innerHTML userInput; /* ✅ 安全写法1使用textContent只会当做纯文本渲染不会解析HTML */ document.getElementById(tip).textContent userInput; /script // 防御辅助简易HTML转义函数输出编码 function htmlEncode(str) { if (!str) return ; return str .replace(//g, amp;) .replace(//g, lt;) .replace(//g, gt;) .replace(//g, quot;) .replace(//g, #39;); } /* 场景必须用innerHTML渲染内容时先转义再写入 */ // elem.innerHTML htmlEncode(userInput);浏览器渲染页面就像放映员放映影片XSS就是攻击者偷偷塞进去的盗版胶片反射型是一次性的盗版碟点开才播放存储型是把盗版碟放进影院片库谁来看都播放DOM型是放映机自己拿到外部信息自行拼接出盗版画面。10.1.2 防御核心手段XSS 防御核心手段是一套分层防护策略从输入校验、输出编码、安全头、沙箱隔离多维度阻止恶意脚本被浏览器解析执行。防御手段作用说明适用范围注意事项输出编码转义根据输出上下文转义特殊字符破坏脚本语法HTML、JS、CSS、URL 上下文不同上下文转义规则不一样不能通用CSP内容安全策略限制页面允许加载、执行的脚本来源阻断内联脚本、eval全局防护优先推荐配置不当容易误杀正常业务脚本HttpOnly Cookie禁止JS读取Cookie就算脚本执行也拿不到会话凭证Cookie安全防护无法防御页面篡改、钓鱼类XSS危害安全DOM API优先 textContent、setAttribute避免 innerHTML、document.write前端DOM操作不能作为唯一防御仅减少漏洞入口输入白名单校验只放行合法格式、字符拒绝不在白名单内的数据表单、提交内容白名单优于黑名单黑名单容易被绕过!-- CSP 示例meta标签方式设置仅作演示优先后端响应头设置 -- meta http-equivContent-Security-Policy content default-src self; script-src self [https://trusted-cdn.com](https://trusted-cdn.com); style-src self; img-src self data:; object-src none; !-- 含义只允许本站和可信CDN的脚本禁止内联脚本、eval、插件 -- // 高危API规避示例 const box document.querySelector(.box); /* ❌ 危险document.write 会解析HTML极易引入XSS */ // document.write(userContent); /* ✅ 安全方式纯文本写入 */ box.textContent userContent; /* 如需设置属性使用setAttribute不要直接拼接字符串到html */ box.setAttribute(title, userContent);CSP相当于影院的准入安检只允许指定供应商的影片进场HttpOnly相当于把重要的会员卡锁进保险柜放映员JS没有钥匙输出编码就是把可疑胶片上的特殊标记涂抹掉让放映机识别不出这是可执行剧本。10.1.3 输入输出过滤原则输入输出过滤原则是区分信任边界对不可信数据在输入、输出两个环节做校验与编码避免原始可控数据流入解析上下文。原则核心含义常见误区不信任原则所有外部输入默认不可信包括URL、表单、后端返回、本地存储认为后端校验过前端就可以直接使用输出优先原则编码放在输出渲染阶段而不是只在输入时一次性过滤输入转义后存入数据库多次取出时重复转义造成乱码上下文匹配原则在哪种上下文渲染就用对应规则编码HTML/JS/CSS/URL一套转义函数到处复用JS上下文仍可被绕过白名单优先优先白名单黑名单只做辅助不做核心防御写一堆过滤script的黑名单容易被注释、大小写绕过/* 输入校验白名单示例只允许字母数字、下划线 */ function validateUsername(input) { const reg /^[a-zA-Z0-9_]{1,20}$/; /* 不符合白名单直接拒绝不进入后续逻辑 */ return reg.test(input); } /* 输出编码不同上下文分开处理 */ function renderHtmlContext(unsafeStr) { return htmlEncode(unsafeStr); } function renderJsContext(unsafeStr) { /* JS上下文需要额外转义 \ 等不要复用HTML转义函数 */ return JSON.stringify(unsafeStr); }输入输出过滤就像食品加工厂的质检输入是原料进厂检查过滤明显异物输出是包装分装根据包装容器HTML/JS/CSS做不同封装处理原料不能只靠进厂检查送到不同容器时都要重新适配防护。

相关推荐

深入理解 JUC:Callable、线程池、信号量、CountDownLatch 与 ConcurrentHashMap 全解析
深入理解 JUC:Callable、线程池、信号量、CountDownLatch 与 ConcurrentHashMap 全解析

深入理解 JUC:Callable、线程池、信号量、CountDownLatch 与 ConcurrentHashMap 全解析JUC(java.util.concurrent)是 JDK 提供的并发编程工具包,把多线程开发中的常见问题都给出了现成方案。本文先讲 Callable 接口与创建线程的四… · 2026/11/4 2:35:15

AgentEvals(agentevals-cli)Agent评测方法与步骤
AgentEvals(agentevals-cli)Agent评测方法与步骤

AgentEvals(agentevals-cli)Agent评测方法与步骤 框架定位与核心原理 业内常说的 AgentEvals 官方全称为 agentevals-cli,是 Strands Labs 开源的框架无关、OpenTelemetry(OTel) Trace 驱动的Agent评测工具,核心设计理念是「一次… · 2026/11/4 2:35:15

【Linux网络】传输层协议TCP(2)连接管理、三次握手、四次挥手
【Linux网络】传输层协议TCP(2)连接管理、三次握手、四次挥手

hello~ 很高兴见到大家! 这次带来的是Linux网络中关于网络基础这部分的一些知识点,如果对你有所帮助的话,可否留下你宝贵的三连呢? 个 人 主 页: 默|笙 文章目录一、连接管理机制1.1 连接与三次握手连接管理三次握手1.2 四次挥手连接管理与理解 TIME_WAIT 状态MSL地址重用/端口… · 2026/11/4 2:35:15

物联网异常检测算法对比与工程实践
物联网异常检测算法对比与工程实践

1. 项目背景与核心价值物联网设备正在以惊人的速度渗透到我们生活的每个角落。从智能家居的温度传感器到工业生产线上的振动监测仪,这些设备每时每刻都在产生海量数据。但随之而来的问题是:如何从这些数据洪流中识别出真正值得关注的异常信号&#xff1f… · 2026/11/4 3:26:24

VMware VMnet1/VMnet8消失的四大根因与根治方案
VMware VMnet1/VMnet8消失的四大根因与根治方案

1. 问题本质与真实场景还原VMware安装后缺失VMnet1、VMnet8虚拟网卡,或设备管理器中这两个适配器显示黄色感叹号——这不是小概率偶发故障,而是我过去三年在某高校实验室、某外包技术支援团队、以及多个远程交付项目中反复遇到的高频顽疾。它直接导致&am… · 2026/11/4 3:26:24

STM32F407+OV2640+ESP8266图像传输实战:从采集到上云
STM32F407+OV2640+ESP8266图像传输实战:从采集到上云

简介:这份资源面向嵌入式与物联网方向的开发者及学习者,围绕STM32F407驱动OV2640摄像头采集图像、经ESP8266 Wi-Fi模块上传服务器并同步串口送往上位机显示这一完整链路,提供可编译运行的工程代码,适合用来练习微控制器编程、传感… · 2026/11/4 3:26:24

大语言模型动态决策在多视图聚类中的应用与优化
大语言模型动态决策在多视图聚类中的应用与优化

1. 项目概述:当大语言模型遇上多视图聚类去年我在处理一组跨模态医疗数据时,发现传统多视图聚类方法在面对异构特征时表现乏力。正当我纠结于特征对齐的阈值设置时,团队里新来的实习生随口说了句:"要是能让模型自己判断不同视… · 2026/11/4 3:26:24

电力电子大作业答辩通关:Boost参数计算、整流波形与PID整定核心考点
电力电子大作业答辩通关:Boost参数计算、整流波形与PID整定核心考点

简介:这份电力电子技术课程大作业文档面向电气工程、自动化等专业学生及电力电子初学者,围绕基于PID控制的Boost型开关电源与可控整流电路设计展开,可帮助读者完成从理论计算到Simulink仿真的完整闭环。文档重点讲解Boost升压变换器中电感与滤… · 2026/11/4 3:26:24

渗透测试工程师成长指南:从基础到实战
渗透测试工程师成长指南:从基础到实战

1. 渗透测试行业的真实挑战作为一名从业多年的网络安全工程师,我见过太多怀揣黑客梦想的年轻人,在接触渗透测试后迅速被现实击垮。这个行业远没有影视作品中那么光鲜亮丽,背后是无数个熬夜研究漏洞的夜晚和持续不断的学习压力。1.1 技术门槛&… · 2026/11/4 3:25:24

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

AI辅助技术栈评估:提升研发决策效率60%
AI辅助技术栈评估:提升研发决策效率60%

1. 项目背景与核心价值技术决策一直是研发团队面临的重大挑战。随着技术生态的快速演进,技术栈的选择、维护和迭代变得愈发复杂。我们团队在过去两年里,先后经历了三次重大技术栈迁移,每次都需要投入大量人力进行技术评估和风险分析。直到去年… · 2026/11/4 0:00:17

从生成Token到直接决策:Jev如何重塑AI Agent工程实践
从生成Token到直接决策:Jev如何重塑AI Agent工程实践

1. 从"生成文字"到"拍板决策":Jev 到底在解决什么问题大多数人第一次接触大模型,脑子里建立的模型是"输入问题、输出文字"。你问它今天天气怎么样,它给你一段描述;你让它写个周报,它给你… · 2026/11/4 0:00:17

32G统一内存跑大模型:内存账、TPS实测与端云分流
32G统一内存跑大模型:内存账、TPS实测与端云分流

想在一台 32G 统一内存的小主机上把大模型跑成"日常可用",这件事我前后折腾了小半年。标题里说的这台 Mac mini M6,是我们这次讨论的目标平台,具体到手规格以实物为准;但下面这套推算方法和实测思路,对任何统… · 2026/11/4 0:00:17

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/4 3:16:49

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 6:04:24

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/3 5:52:46

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码