关于XSS和CSRF,面试官更喜欢这样的回答!

news/2025/11/27 16:01:34/文章来源:https://www.cnblogs.com/haoxiugong/p/19278316

这是我们前端最常见的两种攻击手段,也是面试中最常考的前端攻击。这篇文章我用最精炼、最优雅,也是面试官最喜欢的回答方式来讲解下 XSS 和 CSRF。

一、XSS(跨站脚本)

原理

攻击者把 恶意脚本 注入到受信任页面并被浏览器执行,脚本 利用页面的信任上下文(Cookies、localStorage、DOM)窃取数据或劫持会话。

常见类型

  • 反射型​(参数或路径直接反射到页面并执行)
  • 存储型​(恶意内容存储在服务器,其他用户访问时触发)
  • DOM-based​(客户端不安全的 DOM 操作导致执行,和服务器无关)

最小复现示例(不安全的后端 + 不安全的前端)

后端(Express — 危险示例)

// server.js(示例,仅演示不安全行为)
const express = require('express');
const app = express();app.get('/search', (req, res) => {const q = req.query.q || '';// 直接把用户输入拼到 HTML 中 —— 危险!res.send(`<html><body>搜索: ${q}</body></html>`);
});app.listen(3000);

访问 /search?q=<script>alert(1)</script> 会执行脚本(反射型)。

前端 DOM XSS(危险)

<div id="out"></div>
<script>const q = location.search.split('q=')[1] || '';document.getElementById('out').innerHTML = q; // 不转义 —— 危险(DOM XSS)
</script>

实战防范要点

  1. 输出编码(服务器端)​:所有插入 HTML 的内容做 HTML 转义(&<>\"')。
  2. 前端最小化 innerHTML​:尽量用框架绑定(React/Vue 的模板)替代 innerHTML

    框架框出来的插值({value} / {{ value }})会​自动做 HTML 转义​,把 <>&"' 等关键字符替换成实体(&lt; 等),从而把攻击脚本当文本显示,而不是执行。

  3. 富文本白名单清洗​:对于必须存储/渲染的 HTML(富文本),后端用白名单 sanitizer(比如 bleach / html-sanitizer),前端再用 DOMPurify 做一次保护,对标签属性等进行清洗。
  4. Content-Security-Policy(CSP)头部​:禁止内联脚本、只允许可信源。
  5. HttpOnly Cookie 头部​:token/cookie 设置 HttpOnly,防止被脚本直接读取(减轻 XSS 后果)。

示例代码 — 安全改造

后端(Express + 转义)

const escapeHtml = s => String(s).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;').replace(/'/g, '&#39;');app.get('/search', (req, res) => {const q = escapeHtml(req.query.q || '');res.send(`<html><body>搜索: ${q}</body></html>`);
});

前端(若必须渲染 HTML,用 DOMPurify)

<!-- npm install dompurify -->
<script src="https://unpkg.com/dompurify@2.<!--version-->/dist/purify.min.js"></script>
<div id="content"></div>
<script>// htmlFromServer 来自后端 API,仍需 sanitizeconst htmlFromServer = '<img src=x onerror=alert(1)>';document.getElementById('content').innerHTML = DOMPurify.sanitize(htmlFromServer);
</script>

设置 CSP(Nginx/Express header 示例)

Content-Security-Policy: default-src 'self'; script-src 'self' https://cdn.example.com; object-src 'none';

二、CSRF(跨站请求伪造)

原理

利用用户已登录且浏览器会自动带上凭证(cookie)的特性,攻击者诱导用户发起对受信任站点的请求(如通过自动提交表单或图片请求),从而在用户 名下执行未授权操作。

最小复现示例(攻击者页面)

如果 bank.com/transfer 接受 GET 或 POST 并依赖 cookie 验证,攻击页面可这样写:

<!-- auto.html(在攻击者域名上) -->
<form action="https://bank.com/transfer" method="POST" id="f"><input name="to" value="attacker" /><input name="amount" value="1000" />
</form>
<script>document.getElementById('f').submit();</script>

用户在已登录 bank.com 的情况下访问攻击页面时,浏览器会自动带上 bank.com 的 cookie,导致转账。

防护要点

  1. SameSite Cookie​:把 session/cookie 设置 SameSite=LaxStrict(Lax 对 POST 有保护,适配大多数情形)。
  2. CSRF Token(同步/双提交)​:服务端生成随机 token,响应给前端;敏感请求必须携带并校验该 token。

    该 token 不同于 jwt token ,此处的 csrf-token 只为配合 session+cookie 传统鉴权策略做安全防护。

  3. 检查 Origin/Referer​:对跨站请求校验 OriginReferer 头(通常对 POST/PUT/DELETE 生效)。
  4. 避免用 cookie 做对外 API 的认证​:采用 Authorization: Bearer header 的 token 机制(只有 JS 能读/写),结合 CORS 限制。
  5. 敏感操作二次确认​:密码/OTP/二次验证。

示例代码(Express + scrf token + csurf)

csurf 使用 ​双提交验证机制(CSRF Token)​:

  1. 服务端生成一个 CSRF Token,放在 cookie 或 session 中。
  2. 前端每次发 POST/PUT/DELETE 请求要带上这个 token,常放在请求头或表单隐藏字段,比如:X-CSRF-Token: ey2423482374823748234
  3. 服务端校验 token,是否匹配、是否未过期、是否合法。

后端(Express)

// server.js
const express = require('express');
const cookieParser = require('cookie-parser');
const csurf = require('csurf');const app = express();
app.use(cookieParser());
app.use(express.json());
app.use(csurf({ cookie: { httpOnly: true, sameSite: 'lax' } }));app.get('/csrf-token', (req, res) => {// 返回 token 给 SPA 前端(用于后续请求 header)res.json({ csrfToken: req.csrfToken() });
});app.post('/transfer', (req, res) => {// csurf 中间件会自动校验请求中的 token(_csrf 字段或 X-CSRF-Token header)// 执行转账逻辑...res.json({ ok: true });
});app.listen(3000);

前端 SPA(获取 token 并在请求头中发送)

// 初始化时获取 token
async function init() {const r = await fetch('/csrf-token', { credentials: 'include' });const { csrfToken } = await r.json();window.__CSRF_TOKEN = csrfToken;
}// 发送受保护请求
async function transfer() {await fetch('/transfer', {method: 'POST',credentials: 'include', // 仍然带 cookieheaders: {'Content-Type': 'application/json','X-CSRF-Token': window.__CSRF_TOKEN},body: JSON.stringify({ to: 'bob', amount: 100 })});
}

只用 SameSite(简洁替代,适用多数场景),在服务端设置 cookie:

Set-Cookie: session=...; HttpOnly; Secure; SameSite=Lax; Path=/;

这就能阻止绝大多数通过第三方页面触发的 POST/跨站敏感操作。

三、XSS 与 CSRF 的关键总结

概念:

  • XSS​:攻击者注入脚本并可读取页面内容(更强),根源是输出/DOM 不安全。
  • CSRF​:攻击者伪造用户请求,无法直接读取响应,根源是浏览器自动带凭证。

防护:

  1. 后端统一使用 HTML escape 库;富文本走白名单 sanitizer。
  2. 全站 Cookie:HttpOnly; Secure; SameSite=Lax
  3. 对需要的页面开启 CSP(report-only 先观测,再 enforce)。
  4. SPA:首次获取 CSRF token 并在后续请求中以 header 发送;服务端检查 Origin/Referer
  5. CI/代码审查禁止随意使用 innerHTML/eval/dangerouslySetInnerHTML
  6. 对关键操作实施二次验证(密码/OTP)。

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

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

相关文章

quic协议中Connection ID的协商机制

本文分享自天翼云开发者社区《quic协议中Connection ID的协商机制》.作者:沈****扬 quic协议是基于UDP的应用层可靠协议。 由于UDP本身是无连接的服务,因此quic数据包的连接ID(connection id)用于确定该数据包属于…

口碑佳的深海环境模拟试验装置制造商TOP5推荐:售后完善选择

随着海洋强国战略深化,深海探测、资源开发等领域对深海环境模拟试验装置的需求呈爆发式增长。2024年相关市场规模突破60亿元,年增速超35%,但42%的客户投诉集中在设备精度不足、售后响应滞后、定制化能力弱三大痛点—…

go2视频流udp传输

GStreamer管道字符串的技术原理和各个组件的作用: GStreamer管道字符串详解 udpsrc address=230.1.1.1 port=1720 multicast-iface=<interface_name> ! application/x-rtp, media=video, encoding-name=H264 !…

主题:训练循环定制化实战:以CustomTrainer.fit为例

主题:训练循环定制化实战:以CustomTrainer.fit为例Posted on 2025-11-27 15:59 0泡 阅读(0) 评论(0) 收藏 举报主题:训练循环定制化实战:以CustomTrainer.fit为例日期:2025-11-27引言 大多数推荐系统训练器都…

2025年十大广州西装定制排行榜,浪登定制专业吗?创新能力怎

为帮助消费者与加盟商精准锁定适配需求的西装定制品牌,避免陷入不合身、同质化、服务差的选型误区,我们从量体精准度、设计差异化、供应链稳定性、服务全周期体验及真实客户口碑五大维度,对广州、佛山、深圳等大湾区…

2025年无人机反制模块制造企业权威推荐榜单:无人机探测设备‌/无人机侦测反制设备 ‌/无人机反制设备源头厂家精选

在低空经济快速发展和空域安全需求日益提升的背景下,无人机反制技术已成为关键基础设施防护的重要组成部分。根据市场研究数据显示,全球无人机反制系统市场规模预计将从2023年的15.2亿美元增长到2028年的32.8亿美元,…

2025年水面保洁船直销厂家权威推荐榜单:保洁船‌/河道保洁船 ‌/湖面保洁船源头厂家精选

在河道治理、生态保护与景观维护需求持续增长的背景下,水面保洁船作为高效的水域清洁装备,其性能直接关系到水环境治理的成效与成本。根据QYResearch的调研统计,2031年全球水面清洁船市场销售额预计将达到34.3亿元,…

挑战热极限:如何构建可靠的175℃ AC/DC电源系统

View Post挑战热极限:如何构建可靠的175℃ AC/DC电源系统175℃高温环境的AC/DC电源是专为极端恶劣工况设计的特殊电源,其技术门槛和成本都远高于普通商用或工业用电源。下面将从应用场景、技术挑战、关键技术要点和未…

气象站厂家专业推荐:从专业科研到农业应用的全方位指南

前言 面对复杂多样的气象站市场,一份权威的选购指南能为您节省大量调研时间。 气象监测在当今社会扮演着越来越重要的角色,从农业生产、环境科研到国家基准气候站建设,都离不开精准可靠的气象监测设备。据东方财富网…

详细介绍:Sqoop将MySQL数据导入HDFS

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

跟着东京大学镰谷研究室学习GWAS分析及可视化 - 实践

跟着东京大学镰谷研究室学习GWAS分析及可视化 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas&quo…

DB2数据库解除表空间挂起状态

针对单个表空间进行备份,且可以使用写入管道(使用 /dev/nul,这样备份数据被丢弃,但备份动作是成功的,因此能 彻底解除 backup pending,不占用任何磁盘空间。db2 backup db central tablespace EVCOM_DATA online…

国标GB28181算力算法平台EasyGBS赋能智慧农田可视化监管新模式

国标GB28181算力算法平台EasyGBS赋能智慧农田可视化监管新模式在传统的农业生产中,农田管理很大程度上依赖于农户的日常巡查与经验判断。这种方式不仅耗时费力,且难以及时发现病虫害、盗采、局部干旱等突发问题,可谓…

2025非标钣金定制品牌TOP10权威推荐,非标钣金定制生产厂家精选优质品牌助力工程采购

行业洞察:非标钣金定制市场格局分析 随着制造业转型升级步伐加快,非标钣金定制行业迎来新一轮发展机遇。作为工业制造领域的重要配套产业,非标钣金定制企业的技术实力、生产规模和服务能力成为衡量企业竞争力的关键…

2025年下半年木纹转印/栏杆制作/喷漆/喷塑厂家前五推荐榜单:专业选择指南

摘要 木纹转印行业在2025年下半年持续发展,随着环保要求和定制化需求提升,更多企业寻求可靠的工厂合作。本文提供一份推荐前五的木纹转印工厂榜单,基于行业数据、用户口碑和案例表现编制,排名不分先后,仅供参考。…

这里说的go的OS 线程不会卡,什么意思,是指os线程可以处理其他的程序还是处理其他的http请求,os线程是什么

非常好的问题!我们来彻底讲清楚 “Go 的 OS 线程不会卡” 到底是什么意思,包括:什么是 OS 线程(操作系统线程)? 它和 goroutine 是什么关系? “不会卡”是指能处理其他程序?还是其他 HTTP 请求? 为什么这很重…

nvm 是什么?

nvm 是什么? nvm(Node Version Manager) 是一个用于管理 Node.js 版本的命令行工具。它允许开发者在同一台机器上安装和切换多个版本的 Node.js,以便于在不同的项目中使用不同的 Node.js 版本。 在工作中,我们可能…

2025年专业靠谱口碑不错的国产操作系统公司推荐,高安全适配

在信创浪潮席卷关键行业的当下,一款自主可控、安全稳定的国产操作系统,是企业数字化转型的压舱石。面对市场上纷繁的国产操作系统选择,如何找到专业、靠谱且口碑不错的厂商?以下依据技术实力、行业覆盖与用户评价,…

2025年天津包装印刷服务公司排名:天津福森数码科技有限公司

在包装印刷行业,天津福森数码科技有限公司凭借15年深耕经验、全流程服务能力与数字化管理体系,成为京津冀地区企业选择包装解决方案的核心考量对象。面对福森数码好不好福森数码科技有限公司靠不靠谱的市场疑问,本文…

2025 年 11 月激振器厂家权威推荐榜:DF/HE/LE/ZDQ/RDQ/JR/BE/UE/KWD/G/ML/MV/DVE全系列激振器型号深度解析与选购指南

2025 年 11 月激振器厂家权威推荐榜:DF/HE/LE/ZDQ/RDQ/JR/BE/UE/KWD/G/ML/MV/DVE全系列激振器型号深度解析与选购指南 一、行业背景与发展现状 激振器作为工业振动设备的核心部件,在煤炭、矿山、冶金、电力等行业中发…