前端安全测试该从哪入手? ❤雨欣 提问于 2026-03-12 15:39:20 阅读 3 安全 我们团队最近开始搞安全开发生命周期,轮到我负责前端的安全测试。但我有点懵,不知道该测哪些点——XSS、CSRF 这些听说过,但具体怎么测?用什么工具? 比如我试过在输入框里输 alert(1),但页面没反应,是说明没问题吗?还是说我的测试方式太简单了?有没有系统一点的 checklist 或者自动化方案? 安全开发生命周期安全测试 我来解答 赞 3 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 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 回答 24 浏览 Vue项目做白盒安全测试时,如何避免模板注入风险? 我们团队最近在做Web安全的白盒测试,发现有个Vue组件直接把后端返回的HTML字符串用v-html渲染了,担心会有XSS漏洞。但业务又需要展示富文本,试过用DOMPurify清洗,但测试工具还是报“... 轩辕炜曦 安全 2026-03-07 16:03:19 2 回答 14 浏览 前端密码加密到底该怎么做才安全? 我在做登录页面,用户输入的密码直接传给后端总觉得不安全,想在前端先加密一下。但不知道用什么方式合适,试过用 crypto-js 做 MD5,结果发现好像还是能被破解? 而且我看到有人说前端加密没意义,... 码农艺霖 前端 2026-03-03 09:27:20 1 回答 16 浏览 前端渗透测试中如何防范CSS注入攻击? 我在做安全测试时,发现用户输入的样式能直接渲染到页面上,担心有CSS注入风险。比如下面这段动态生成的CSS: .user-style { background: url(' + userInput +... ❤恒菽 安全 2026-03-01 08:01:19 1 回答 18 浏览 安全需求阶段前端要做什么? 我们团队刚开始引入安全开发生命周期(SDL),现在卡在“安全需求”这一步。作为前端,我不太清楚自己该提哪些具体的安全需求,比如是不是所有用户输入都要过滤?还是说只要后端处理就行? 我试过在表单提交前用... 伊可 安全 2026-02-28 22:05:21 1 回答 24 浏览 前端项目里怎么集成SAST工具做代码扫描? 我们团队最近要落地安全开发生命周期,领导让在前端项目里加上SAST(静态应用安全测试)工具。但我试了几个,比如 ESLint 的 security 插件,还有 SonarQube,配置起来特别迷糊。 ... 伊可 安全 2026-02-27 05:13:22 2 回答 31 浏览 前端加盐哈希密码真的安全吗? 我最近在做一个登录页面,想在前端对用户密码加盐再哈希,但不确定这样是不是真的安全。听说盐值不能硬编码,可如果每次随机生成,后端怎么验证呢? 我试了用 crypto-js 库,代码大概这样: const... Mr-银银 安全 2026-02-26 16:28:21 1 回答 53 浏览 前端项目中如何规范处理安全漏洞修复流程? 我们团队最近在做SDL(安全开发生命周期),但对前端这块的漏洞管理有点懵。比如发现一个XSS风险,改完代码后,怎么确保它被正确记录、验证和关闭? 试过在Jira里建个ticket,但不知道要不要关联c... 上官正利 安全 2026-02-24 01:48:18 2 回答 23 浏览 前端能用 Metasploit 做什么安全测试吗? 我最近在学 Web 安全,看到很多人用 Metasploit,但它是 Ruby 写的,主要搞后端渗透吧? 作为前端开发者,我试过在本地用 msfconsole 扫描自己搭的 Vue 项目,结果连 XS... 丽珍 Dev 安全 2026-02-23 22:27:17 2 回答 65 浏览 为什么我的Metasploit模块在前端测试时提示连接被拒绝? 我在本地测试一个前端应用的API接口时,用Metasploit的http_header_flood模块模拟DDoS攻击,设置RHOSTS为本机IP后运行,结果一直报"Connection refuse... 鑫哲 安全 2026-01-26 19:32:27 1 回答 2 浏览 前端日志该记到哪?浏览器里能存审计日志吗? 我们项目要做安全审计,要求记录用户关键操作日志。但我是前端,不太清楚这些日志到底该存在哪儿? 试过用 console.log() 打印,但这显然不能当正式日志用。也想过用 localStorage 存... UX-福萍 安全 2026-03-12 11:14:25
前端安全测试的的几个重点方向
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的基础防护做了,再逐步覆盖其他攻击面。