在 Vue 中解决接口安全问题,主要从传输层、认证授权、数据校验、前端防护四个维度入手。
1. 传输层安全:HTTPS
核心措施:强制所有 API 请求使用 HTTPS 协议,防止数据在传输过程中被窃听或篡改。
Vue 实现:在
axios或fetch中配置 baseURL 为https://,开发环境通过代理(如 Vue CLI 的proxy)模拟 HTTPS。
2. 身份认证与授权
Token 认证:
使用 JWT(JSON Web Token) 或 OAuth2:用户登录后,服务端返回 Token,前端存储在
localStorage/sessionStorage或HttpOnly Cookie(防 XSS)。请求拦截:在
axios拦截器中统一添加 Token 到请求头(如Authorization: Bearer xxx)。
权限控制:
前端路由守卫:在
router.beforeEach中校验用户权限,控制页面访问。后端接口权限:关键! 前端权限控制仅作体验优化,真正的权限校验必须由后端完成(如 RBAC 模型)。
3. 防攻击策略
CSRF(跨站请求伪造):
方案:使用 CSRF Token(登录时由服务端下发,前端在请求头携带)或 SameSite Cookie。
Vue 实现:
axios默认不携带 Cookie,需设置withCredentials: true,并配合后端Set-Cookie的SameSite=Strict/Lax。
XSS(跨站脚本攻击):
前端防护:避免
v-html直接渲染用户输入,使用textContent或文本插值{{ }}(Vue 自动转义)。后端防护:对用户输入进行过滤(如转义
<>),返回数据时设置Content-Security-Policy响应头。
接口防刷:
前端:按钮点击防抖(如
lodash.debounce)、验证码。后端:核心! 实现请求频率限制(如 Redis 计数器)、IP 黑名单。
4. 数据校验与加密
参数校验:
前端:表单校验(如
VeeValidate)提升用户体验。后端:必须! 严格校验所有请求参数(如类型、长度、格式),防止 SQL 注入等攻击。
敏感数据:
传输加密:HTTPS 已覆盖。
存储加密:密码等敏感信息前端不存储,Token 使用短期有效期 + 刷新机制。
5. 其他关键实践
CORS 跨域:后端配置
Access-Control-Allow-Origin为可信域名,避免*。错误处理:前端统一拦截错误码(如 401 跳转登录页),避免暴露服务器错误详情。
依赖安全:定期扫描
npm依赖漏洞(如npm audit fix)。
面试总结回答模板:
"在 Vue 中保障接口安全,核心是HTTPS + 认证授权 + 防攻击策略 + 数据校验:
传输层强制使用 HTTPS;
认证通过 JWT Token(axios 拦截器统一添加),授权依赖后端 RBAC 模型;
防 CSRF用 SameSite Cookie 或 Token,防 XSS避免
v-html并转义用户输入;数据校验前端做基础校验,后端必须严格过滤参数;
关键点:前端安全是辅助,真正的防线在后端(如权限校验、频率限制、SQL 注入防护)。"
面试官追问点准备:
Q:Token 存在
localStorage有什么风险?如何优化?
A:localStorage易受 XSS 攻击,可改用HttpOnly Cookie(需后端配合),或短期 Token + 刷新机制。Q:如何防止接口被恶意爬取?
A:后端实现请求签名(如对参数排序加密)、频率限制、验证码,前端添加反爬虫逻辑(如动态参数)。Q:Vue 项目中如何实践 CSP?
A:通过 Webpack 插件(如csp-html-webpack-plugin)或后端设置Content-Security-Policy响应头,限制资源加载来源。