Skip to content

全栈面试:网络与安全

从输入 URL 到页面展示发生了什么?

典型流程:

  1. 浏览器解析 URL。
  2. DNS 解析域名。
  3. 建立 TCP 连接。
  4. HTTPS 场景下进行 TLS 握手。
  5. 浏览器发送 HTTP 请求。
  6. 服务端处理请求并返回响应。
  7. 浏览器解析 HTML、CSS、JS。
  8. 构建 DOM 和 CSSOM。
  9. 执行 JS,渲染页面。

这是全栈面试高频题,回答时可以按网络、服务端、浏览器渲染三层展开。

HTTP 和 HTTPS 有什么区别?

HTTPS = HTTP + TLS。

HTTPS 提供:

  • 加密传输
  • 身份认证
  • 数据完整性校验

HTTP 明文传输,容易被窃听和篡改。

登录、支付、用户信息等场景必须使用 HTTPS。

HTTP 状态码常见有哪些?

常见状态码:

  • 200 成功
  • 201 创建成功
  • 204 成功但无内容
  • 301 永久重定向
  • 302 临时重定向
  • 304 缓存未修改
  • 400 请求参数错误
  • 401 未登录
  • 403 无权限
  • 404 资源不存在
  • 409 冲突
  • 429 请求过多
  • 500 服务端错误
  • 502 网关错误
  • 503 服务不可用

面试时要能结合接口设计说明使用场景。

Cookie、Session、Token 有什么区别?

Cookie 是浏览器存储并随请求发送的小段数据。

Session 是服务端保存的会话状态,客户端通常通过 Cookie 保存 session id。

Token 是一种令牌,常见于前后端分离和移动端。

常见区别:

  • Session 状态在服务端。
  • JWT token 通常自包含,服务端可无状态校验。
  • Cookie 可以配合 HttpOnlySecureSameSite 增强安全。

XSS 是什么?怎么防?

XSS 是攻击者把恶意脚本注入页面,导致脚本在用户浏览器执行。

防护方式:

  • 输出转义
  • 不直接插入不可信 HTML
  • 使用 CSP
  • Cookie 设置 HttpOnly
  • 对用户输入做过滤

前端框架默认会对插值转义,但 v-htmldangerouslySetInnerHTML 这类能力要谨慎使用。

CSRF 是什么?怎么防?

CSRF 是攻击者诱导用户浏览器带着登录态向目标网站发起请求。

防护方式:

  • CSRF Token
  • SameSite Cookie
  • 验证 Referer / Origin
  • 关键操作二次确认

如果使用 token 放在 Authorization header 中,CSRF 风险会降低,但仍要注意 XSS。

SQL 注入是什么?怎么防?

SQL 注入是攻击者把恶意 SQL 片段拼进查询语句。

防护方式:

  • 使用参数化查询
  • ORM 正确绑定参数
  • 不拼接用户输入
  • 最小权限数据库账号
  • 输入校验

不要只依赖前端校验,后端必须防护。

常见安全响应头有哪些?

常见响应头:

  • Content-Security-Policy
  • X-Frame-Options
  • X-Content-Type-Options
  • Strict-Transport-Security
  • Referrer-Policy

它们可以帮助减少 XSS、点击劫持、类型嗅探等风险。

如何做限流?

常见限流算法:

  • 固定窗口
  • 滑动窗口
  • 令牌桶
  • 漏桶

常见维度:

  • IP
  • 用户 ID
  • 接口
  • API key

登录、短信、搜索、AI 调用等接口都需要考虑限流。

网络安全面试追问

HTTPS 握手过程是什么?

HTTPS 基于 TLS。简单说,客户端先发起握手并告诉服务端支持的 TLS 版本和加密套件;服务端返回证书;客户端校验证书可信后,双方协商出会话密钥;后续 HTTP 数据用对称加密传输。

面试时可以抓住重点:证书解决身份可信,非对称加密用于协商密钥,对称加密用于高效传输,摘要和签名用于防篡改。

TCP 三次握手和四次挥手是什么?

三次握手用于建立可靠连接,核心是双方确认彼此的发送和接收能力正常。流程可以概括为:客户端发 SYN,服务端回 SYN+ACK,客户端再回 ACK。

四次挥手用于关闭连接,因为 TCP 是双向通信,一方关闭发送能力后,另一方可能还有数据要发送。面试时要说明:三次握手是为了可靠建立连接,四次挥手是为了可靠释放双向连接。

HTTP/1.1、HTTP/2、HTTP/3 有什么区别?

HTTP/1.1 支持长连接,但同一连接上请求响应仍容易受到队头阻塞影响。HTTP/2 引入二进制分帧、多路复用、头部压缩,能在一个 TCP 连接上并发多个请求。

HTTP/3 基于 QUIC 和 UDP,减少 TCP 层队头阻塞,并优化连接建立速度。面试回答可以结合性能:HTTP/2/3 主要是提高并发传输效率和弱网体验。

如何防止接口被刷?

接口防刷通常从限流、鉴权、验证码、风控、黑白名单和成本控制入手。高风险接口可以按 IP、用户、设备、接口、租户等维度限制频率。

如果是短信、登录、AI 调用等高成本接口,还要做行为分析、失败次数限制、冷却时间和告警。回答时要强调:防刷不是一个验证码能解决,而是多层防护。

如何保护用户密码?

密码不能明文存储,也不能用普通 MD5 直接存。应该使用专门的密码哈希算法并加盐,例如 bcrypt、scrypt、Argon2。

传输层要使用 HTTPS,登录失败要限制频率,重置密码要使用短期 token,并记录安全审计日志。即使数据库泄露,也要尽量提高攻击者破解成本。

如何做文件上传安全?

文件上传要限制类型、大小、数量和权限,不能只相信前端后缀名。后端要检查 MIME、文件签名,重命名存储,避免用户控制存储路径。

上传后的文件最好放到对象存储或隔离域名,不直接在业务服务目录执行。图片可做压缩和 EXIF 清理,高风险文件需要病毒扫描。

如何处理跨域和 CORS?

跨域是浏览器同源策略限制,不是服务器不能访问服务器。CORS 由服务端返回允许的来源、方法、请求头和是否携带凭证。

如果需要携带 Cookie,Access-Control-Allow-Origin 不能写 *,并且要配置 Access-Control-Allow-Credentials。开发环境可以用代理,生产环境通常由网关或后端统一配置。

如何设计安全的登录态?

登录态可以用 Session、JWT 或短 token + refresh token。关键是过期时间、刷新机制、退出登录、设备管理、权限变更后的失效策略。

如果 token 放 Cookie,要设置 HttpOnlySecureSameSite;如果放本地存储,要重点防 XSS。高风险操作还可以要求二次验证。

Built with VitePress and GitHub Pages.