大宇宇宇
发布于 2025-09-01 / 5 阅读
0
0

接口安全

在 Vue 中解决接口安全问题,主要从传输层、认证授权、数据校验、前端防护四个维度入手。


1. 传输层安全:HTTPS

  • 核心措施:强制所有 API 请求使用 HTTPS 协议,防止数据在传输过程中被窃听或篡改。

  • Vue 实现:在 axiosfetch 中配置 baseURL 为 https://,开发环境通过代理(如 Vue CLI 的 proxy)模拟 HTTPS。


2. 身份认证与授权

  • Token 认证

    • 使用 JWT(JSON Web Token)OAuth2:用户登录后,服务端返回 Token,前端存储在 localStorage/sessionStorageHttpOnly Cookie(防 XSS)。

    • 请求拦截:在 axios 拦截器中统一添加 Token 到请求头(如 Authorization: Bearer xxx)。

  • 权限控制

    • 前端路由守卫:在 router.beforeEach 中校验用户权限,控制页面访问。

    • 后端接口权限关键! 前端权限控制仅作体验优化,真正的权限校验必须由后端完成(如 RBAC 模型)。


3. 防攻击策略

  • CSRF(跨站请求伪造)

    • 方案:使用 CSRF Token(登录时由服务端下发,前端在请求头携带)或 SameSite Cookie

    • Vue 实现axios 默认不携带 Cookie,需设置 withCredentials: true,并配合后端 Set-CookieSameSite=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 + 认证授权 + 防攻击策略 + 数据校验

  1. 传输层强制使用 HTTPS;

  2. 认证通过 JWT Token(axios 拦截器统一添加),授权依赖后端 RBAC 模型;

  3. 防 CSRF用 SameSite Cookie 或 Token,防 XSS避免 v-html 并转义用户输入;

  4. 数据校验前端做基础校验,后端必须严格过滤参数;

  5. 关键点:前端安全是辅助,真正的防线在后端(如权限校验、频率限制、SQL 注入防护)。"


面试官追问点准备:

  • Q:Token 存在 localStorage 有什么风险?如何优化?
    A:localStorage 易受 XSS 攻击,可改用 HttpOnly Cookie(需后端配合),或短期 Token + 刷新机制。

  • Q:如何防止接口被恶意爬取?
    A:后端实现请求签名(如对参数排序加密)、频率限制、验证码,前端添加反爬虫逻辑(如动态参数)。

  • Q:Vue 项目中如何实践 CSP?
    A:通过 Webpack 插件(如 csp-html-webpack-plugin)或后端设置 Content-Security-Policy 响应头,限制资源加载来源。


评论