MST

星途 面试题库

面试题:JavaScript 数据交互安全及漏洞防范

在 JavaScript Web 编程的数据交互过程中,存在多种安全风险,如 XSS、CSRF 等。请详细分析这些常见安全漏洞的成因、攻击方式,并阐述你如何在项目中从前端代码层面、数据传输层面以及后端配合等多方面进行全面有效的防范措施,同时说明每种防范措施的原理和适用场景。
12.9万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

XSS(跨站脚本攻击)

  • 成因
    • 主要是因为应用程序对用户输入的数据过滤或转义不充分,使得恶意用户能够将恶意脚本注入到网页中。当其他用户访问该网页时,恶意脚本就会在他们的浏览器中执行。
  • 攻击方式
    • 反射型 XSS:攻击者构造包含恶意脚本的链接,诱使用户点击。例如在搜索框注入恶意脚本,搜索结果页面将恶意脚本返回到用户浏览器执行。
    • 存储型 XSS:恶意脚本被存储在服务器端,如在论坛发布包含恶意脚本的帖子,其他用户浏览该帖子时脚本执行。
    • DOM - based XSS:通过修改页面的 DOM 树,在客户端执行恶意脚本,例如通过修改 location.hash 触发。
  • 前端防范措施
    • 输入验证:对用户输入进行严格的格式检查,比如使用正则表达式验证邮箱、手机号格式等。原理是只允许符合预期格式的数据通过,阻止恶意脚本注入。适用于所有需要用户输入的场景,如注册、登录、表单提交等。
    • 输出转义:在将用户输入显示到页面之前,使用合适的转义函数。如在 React 中,默认会对数据进行转义;在原生 JavaScript 中,可使用 DOMPurify 库。原理是将特殊字符转义成无害的形式,使脚本无法执行。适用于所有向页面输出用户输入内容的场景。
  • 数据传输层面防范措施
    • HTTPS:使用 HTTPS 协议传输数据,加密数据传输过程。原理是通过 SSL/TLS 加密,防止中间人篡改传输中的数据,从而避免恶意脚本被注入。适用于所有数据传输场景,尤其是涉及用户敏感信息的传输。
  • 后端配合防范措施
    • 黑名单与白名单过滤:建立输入内容的白名单,只允许特定字符和格式的输入;或者建立黑名单,阻止常见的恶意脚本关键字输入。原理是通过在服务器端再次验证输入数据,确保数据安全。适用于服务器接收用户输入并处理的场景,如 API 接口接收参数。

CSRF(跨站请求伪造)

  • 成因
    • 攻击者利用用户已登录的身份,在用户不知情的情况下,以用户的名义发送恶意请求到目标网站。网站无法区分请求是用户本人发起还是攻击者伪造的,因为浏览器会自动带上用户的登录凭证(如 cookie)。
  • 攻击方式
    • 攻击者构造一个恶意链接或页面,当用户登录目标网站后访问该恶意页面,页面会自动向目标网站发送伪造的请求,如转账、修改密码等操作。
  • 前端防范措施
    • 添加 CSRF Token:在页面加载时,后端生成一个随机的 Token 并返回给前端,前端在每次请求时将 Token 包含在请求参数或请求头中。原理是服务器通过验证 Token 的有效性来判断请求是否合法,只有合法请求才会带有正确的 Token。适用于所有需要用户身份验证的请求场景。
  • 数据传输层面防范措施
    • Same - Site Cookie:设置 Same - Site 属性为 StrictLaxStrict 模式下,浏览器仅在请求来自同一站点时才会发送 cookie;Lax 模式相对宽松,但也限制第三方请求发送 cookie。原理是限制 cookie 在跨站请求中的发送,降低 CSRF 风险。适用于所有使用 cookie 进行身份验证的场景。
  • 后端配合防范措施
    • 验证 Referer 字段:检查请求头中的 Referer 字段,确保请求来源是合法的本网站页面。原理是合法请求的来源通常是本网站页面,通过验证来源可识别伪造请求。但 Referer 字段可被伪造,适用场景有限,可作为辅助防范手段。
    • 验证 CSRF Token:后端接收到请求后,验证请求中的 CSRF Token 是否与服务器端存储的 Token 一致。原理同前端添加 CSRF Token,确保请求合法性。适用于后端处理用户身份验证相关请求的场景。