前端安全问题?XSS和CSRF?

一、XSS(跨站脚本攻击)

🔥 本质

攻击者把恶意 JS 注入到页面里执行。

👉 你的网站,被别人"插代码"


🧨 常见类型

1️⃣ 存储型 XSS(最危险)

恶意代码被存进数据库

流程:

  1. 攻击者提交评论:

  2. 后端存库

  3. 用户打开页面 → 代码执行


2️⃣ 反射型 XSS

恶意代码在 URL 里

复制代码
https://test.com?q=<script>alert(1)</script>

后端直接返回到页面 ⇒ 执行


3️⃣ DOM 型 XSS

前端自己写出来的漏洞(你最容易踩)

复制代码
document.body.innerHTML = location.search

🛡️ 防御方案(重点!!!)

✅ 1. 转义(最核心)

复制代码
<div>{userInput}</div>  // React 自动转义 ✔

避免:

复制代码
<div dangerouslySetInnerHTML={{ __html: html }} />

✅ 2. 使用白名单过滤

常用库:

  • dompurify

    import DOMPurify from 'dompurify'
    DOMPurify.sanitize(html)


✅ 3. CSP(内容安全策略)

HTTP 头:

复制代码
Content-Security-Policy: script-src 'self'

👉 禁止外部脚本执行


复制代码
Set-Cookie: token=xxx; HttpOnly

👉 JS 拿不到 cookie ⇒ 防止被盗


⚠️ 前端高危点(你要特别注意)

  • innerHTML

  • dangerouslySetInnerHTML

  • URL 参数直接渲染

  • 富文本编辑器(最常见)


二、CSRF(跨站请求伪造)

🔥 本质

攻击者诱导用户在已登录状态下发起请求

👉 利用"你的身份"去干坏事


🧨 攻击流程

  1. 用户登录了银行网站(cookie 已存在)

  2. 打开恶意网站

  3. 自动发请求:

👉 浏览器自动带 cookie

👉 银行以为是你操作的


🛡️ 防御方案(重点!!!)

✅ 1. CSRF Token(最有效)

流程:

  1. 服务端生成 token

  2. 前端请求时带上

    axios.post('/api', data, {
    headers: {
    'X-CSRF-Token': token
    }
    })

👉 攻击者拿不到 token ⇒ 无法伪造


✅ 2. SameSite Cookie(现代推荐)

复制代码
Set-Cookie: session=xxx; SameSite=Strict

作用:

值 说明
Strict 完全禁止跨站
Lax 部分允许(推荐)

✅ 3. 验证 Referer / Origin

后端校验:

复制代码
Origin: https://yourdomain.com

✅ 4. 避免 GET 修改数据

❌ 错误:

复制代码
GET /deleteUser?id=1

✔ 正确:

复制代码
POST /deleteUser

三、XSS vs CSRF 对比(面试高频)

XSS CSRF
本质 注入 JS 伪造请求
攻击对象 用户浏览器 服务器
是否需要登录 ❌ 不一定 ✅ 必须
是否执行 JS ✅ ❌
主要防御 转义 / CSP Token / SameSite

四、结合你实际开发(重点建议 🚀)

你做 React / Vue + axios,可以这样落地:

✅ axios 全局加 CSRF

复制代码
axios.interceptors.request.use(config => {
  config.headers['X-CSRF-Token'] = getToken()
  return config
})

✅ 富文本必须过滤

复制代码
DOMPurify.sanitize(content)

✅ 不信任任何输入

包括:

  • URL 参数

  • 表单输入

  • 后端返回数据(是的,也要防)


五、一句话总结(面试用)

👉 XSS:让页面执行恶意 JS

👉 CSRF:让用户"在不知情下"发请求

相关推荐
MicrosoftCloud8 小时前
用户权限 04|/etc/sudoers 安全配置:从最小授权到「别把 ALL 随便给人」
运维·安全·ubuntu·sudo·sudoers
福兮说10 小时前
设计稿是 #4A7C6F,页面量出来是 #4B7C6F:HEX、HSL、透明度、canvas 来回转的七个坑
前端·javascript·css·canvas
郑州光合科技余经理10 小时前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
小呆呆66611 小时前
副业搞起来,小说,漫画,漫剧的成本优化思路
前端·后端·面试
Dovis(誓平步青云)11 小时前
浇水提醒刚弹出又消失,植物状态别只存一个百分比
开发语言·前端·javascript·pdf·ecmascript·电脑
码艺-Alimjan12 小时前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_12 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒13 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技13 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu14 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub