前端安全测试该从哪入手? ❤雨欣 提问于 2026-03-12 15:39:20 阅读 62 安全 我们团队最近开始搞安全开发生命周期,轮到我负责前端的安全测试。但我有点懵,不知道该测哪些点——XSS、CSRF 这些听说过,但具体怎么测?用什么工具? 比如我试过在输入框里输 alert(1),但页面没反应,是说明没问题吗?还是说我的测试方式太简单了?有没有系统一点的 checklist 或者自动化方案? 安全开发生命周期安全测试 我来解答 赞 12 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 上官萍萍 Lv1 先回答你的核心困惑:alert(1)没反应不等于安全。现代前端框架(React、Vue等)默认会转义内容,浏览器也有XSS过滤器,你的payload可能根本没机会执行。真正的测试要比这复杂得多。 前端安全测试的的几个重点方向 XSS(跨站脚本攻击) 是前端最常考量的攻击面,分为三种类型,反射型和存储型比较好理解,DOM型比较坑——它完全在客户端发生,后端日志根本看不到。测试DOM型XSS要重点关注这些API:innerHTML、outerHTML、document.write、eval、setTimeout/setInterval的第一个参数、还有各种事件处理器。 CSRF(跨站请求伪造) 的测试关键是看请求有没有随机token保护。你可以试着去掉cookie或者在另一个域名下发请求,看看服务器还认不认这个请求。 点击劫持 就是把你的页面嵌套在透明的iframe里,诱导用户点击。测试方法很简单,检查响应头里有没有X-Frame-Options或者CSP的frame-ancestors指令。 具体的测试checklist XSS测试要准备多payload,因为单一payload容易被过滤。基础的可能无效,但、、这些变体经常能绕过。DOM型XSS还要关注URL参数直接写入页面的场景,比如?redirect=https://evil.com这种。 CSRF测试先看表单有没有csrf token,再看token是否绑定用户session,然后尝试删除token或者用无效token发请求,看服务器是否正确拒绝。 敏感信息泄露要检查localStorage/sessionStorage里有没有存token或用户隐私数据,控制台Network面板看请求返回有没有泄漏敏感字段。 自动化工具和方案 如果想要半自动化,可以用OWASP ZAP的爬虫功能扫一遍,它能发现常见的XSS和CSRF问题。配合npm的audit工具检查依赖漏洞: # 检查依赖漏洞 npm audit # 加上fix参数自动修复 npm audit fix 对于前端代码,可以用eslint-plugin-security这个插件,它会在lint阶段检测危险API的使用: // .eslintrc.js 配置 module.exports = { plugins: ['security'], rules: { // 检测eval使用 'security/detect-eval-with-expression': 'error', // 检测不安全的正则 'security/detect-non-literal-regexp': 'error', // 检测不安全的innerHTML 'security/detect-innerhtml': 'warn', // 检测console.log是否会泄露敏感信息(生产环境禁用) 'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off' } }; 一个简单的CSRF测试脚本示例 // csrf-test.js const fetch = require('node-fetch'); async function testCSRF(targetUrl, cookie) { // 测试1:不带CSRF token的请求 const noTokenResponse = await fetch(targetUrl, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Cookie': cookie }, body: JSON.stringify({ action: 'delete', id: 123 }) }); console.log('无token请求状态:', noTokenResponse.status); // 如果返回200说明没有CSRF保护,很危险 // 测试2:跨域发送请求(模拟CSRF攻击) try { const corsResponse = await fetch(targetUrl, { method: 'POST', mode: 'no-cors', // 跨域模式 body: JSON.stringify({ action: 'transfer', amount: 9999 }) }); console.log('跨域请求发送成功,可能存在CSRF漏洞'); } catch (e) { console.log('跨域请求被阻止'); } } // 使用方式 testCSRF('https://your-app.com/api/action', 'session=abc123'); 需要注意的常见坑 很多前端开发者会忽略一点:前端的安全措施主要是提升攻击门槛,真正的安全验证必须在后端完成。比如你可以在前端做输入过滤和转义,但后端必须重新验证和过滤,因为攻击者可以直接绕过前端直接调用API。 还有就是CSP(内容安全策略)这个好东西配置起来比较复杂,很多团队嫌麻烦就放弃了,其实它能有效阻止XSS攻击和跨域请求。 最后说句掏心话:自动化工具只能发现大概70%的问题,剩下那些业务逻辑相关的漏洞(比如越权操作、参数篡改)还是得靠人工代码审计。你们团队要是刚起步做SDL,可以先把XSS和CSRF的基础防护做了,再逐步覆盖其他攻击面。 回复 点赞 2026-03-12 16:04 加载更多 相关推荐 1 回答 41 浏览 前端安全测试中如何防止XSS攻击? 我在做安全测试时发现,用户输入的内容直接渲染到页面上可能会被注入脚本。比如下面这个React组件,虽然用了 dangerouslySetInnerHTML,但不确定怎么安全地处理用户输入。 const... 小利娟 安全 2026-03-30 09:10:15 2 回答 126 浏览 前端项目里怎么用Fuzzing测试输入框的安全性? 我最近在学安全开发生命周期,看到Fuzzing能用来测输入漏洞,但不太清楚前端怎么实际用。比如一个用户注册页面的邮箱输入框,我想自动喂各种奇怪字符串看会不会出问题,该怎么做? 试过手动复制一些payl... 皇甫胜楠 安全 2026-03-17 00:48:18 1 回答 74 浏览 白盒测试时怎么判断前端代码是否存在XSS风险? 最近在做项目安全自查,听说白盒测试要查XSS漏洞,但我看自己写的React组件里都是用{userInput}这种插值,应该没问题吧?可又不确定有没有漏掉什么场景。 比如有个地方用了dangerousl... 设计师丽丽 安全 2026-03-31 04:19:14 1 回答 75 浏览 前端日志如何接入SIEM系统做安全审计? 我们团队最近要配合安全组把用户操作日志接入公司的SIEM平台,但我搞不清前端该怎么做才合规。尝试过在Vue里直接发日志到后端接口,但安全同事说字段格式不对,还可能泄露敏感信息。 比如下面这段代码,我把... 程序员美玲 安全 2026-03-31 03:12:14 1 回答 81 浏览 前端项目做安全评估时该检查哪些地方? 最近公司要对我们的 React 项目做安全审计,但我作为前端不太清楚具体要查什么。XSS、CSRF 这些听说过,但不知道在代码里怎么找漏洞。 比如我们有用 dangerouslySetInnerHTM... 码农淑萍 安全 2026-03-30 18:07:11 1 回答 56 浏览 前端用 MD5 加密密码真的安全吗? 我在做一个登录页面,想在前端用 MD5 对用户密码做哈希后再传给后端。但听说 MD5 已经不安全了,可我看很多老项目还在用,有点懵。 我试过用 crypto-js/md5 这个库,代码大概是这样: i... a'ゞ旗施 安全 2026-03-27 11:01:23 1 回答 63 浏览 安全需求阶段前端要做什么具体工作? 我们团队刚开始推行安全开发生命周期(SDL),现在卡在「安全需求」阶段。作为前端,除了常规的功能需求,到底要提哪些和安全相关的需求啊?比如是不是得要求后端接口必须带 CSRF token?还是说要明确... 司空冬冬 安全 2026-03-27 08:32:23 1 回答 55 浏览 IAST在前端项目中怎么实际集成和使用? 我们团队最近开始引入IAST做安全测试,但我作为前端开发有点懵——IAST不是主要针对后端的吗?我在本地跑 Vue 项目时,尝试按文档把 agent 接入,但根本不知道它能检测我哪些代码。 比如我写了... 公孙晨晰 安全 2026-03-26 16:48:21 1 回答 70 浏览 前端加密时密钥到底该怎么安全存储? 我在做用户敏感数据的前端加密,用的是 AES,但密钥放哪儿都感觉不安全。放 localStorage 会被 XSS 拿走,写死在代码里又容易被反编译看到,这不就白加密了? 试过用环境变量 proces... 司徒倩云 安全 2026-03-25 16:04:24 2 回答 56 浏览 白盒测试时如何检测前端代码中的XSS漏洞? 我在做项目的安全自查,听说白盒测试要查XSS,但不太清楚具体该看哪些地方。比如用户输入的内容在页面上展示时,是不是只要用了innerHTML就有风险? 我试过用ESLint的security插件,但它... UI雯婧 安全 2026-03-23 19:25:20
前端安全测试的的几个重点方向
XSS(跨站脚本攻击) 是前端最常考量的攻击面,分为三种类型,反射型和存储型比较好理解,DOM型比较坑——它完全在客户端发生,后端日志根本看不到。测试DOM型XSS要重点关注这些API:innerHTML、outerHTML、document.write、eval、setTimeout/setInterval的第一个参数、还有各种事件处理器。
CSRF(跨站请求伪造) 的测试关键是看请求有没有随机token保护。你可以试着去掉cookie或者在另一个域名下发请求,看看服务器还认不认这个请求。
点击劫持 就是把你的页面嵌套在透明的iframe里,诱导用户点击。测试方法很简单,检查响应头里有没有X-Frame-Options或者CSP的frame-ancestors指令。
具体的测试checklist
XSS测试要准备多payload,因为单一payload容易被过滤。基础的
可能无效,但
、、这些变体经常能绕过。DOM型XSS还要关注URL参数直接写入页面的场景,比如?redirect=https://evil.com这种。CSRF测试先看表单有没有csrf token,再看token是否绑定用户session,然后尝试删除token或者用无效token发请求,看服务器是否正确拒绝。
敏感信息泄露要检查localStorage/sessionStorage里有没有存token或用户隐私数据,控制台Network面板看请求返回有没有泄漏敏感字段。
自动化工具和方案
如果想要半自动化,可以用OWASP ZAP的爬虫功能扫一遍,它能发现常见的XSS和CSRF问题。配合npm的audit工具检查依赖漏洞:
对于前端代码,可以用eslint-plugin-security这个插件,它会在lint阶段检测危险API的使用:
一个简单的CSRF测试脚本示例
需要注意的常见坑
很多前端开发者会忽略一点:前端的安全措施主要是提升攻击门槛,真正的安全验证必须在后端完成。比如你可以在前端做输入过滤和转义,但后端必须重新验证和过滤,因为攻击者可以直接绕过前端直接调用API。
还有就是CSP(内容安全策略)这个好东西配置起来比较复杂,很多团队嫌麻烦就放弃了,其实它能有效阻止XSS攻击和跨域请求。
最后说句掏心话:自动化工具只能发现大概70%的问题,剩下那些业务逻辑相关的漏洞(比如越权操作、参数篡改)还是得靠人工代码审计。你们团队要是刚起步做SDL,可以先把XSS和CSRF的基础防护做了,再逐步覆盖其他攻击面。