Node.js 面试题
目录

请解释如何防止跨站请求伪造 (CSRF)?

· 约 3 分钟读完 · 第 171 / 377 章

推荐答案

为了防止跨站请求伪造 (CSRF),可以采取以下几种措施:

  1. 使用 CSRF Token:在表单或请求中包含一个随机生成的 CSRF Token,并在服务器端验证该 Token 的有效性。只有 Token 验证通过,请求才会被处理。

  2. SameSite Cookie 属性:设置 Cookie 的 SameSite 属性为 Strict 或 Lax,以防止跨站请求携带 Cookie。

  3. 验证 HTTP Referer 头部:检查请求的 Referer 头部,确保请求来自合法的源。

  4. 双重提交 Cookie:将 CSRF Token 同时存储在 Cookie 和请求参数中,并在服务器端验证两者是否匹配。

本题详细解读

1. 使用 CSRF Token

CSRF Token 是一种常见的防御机制。服务器在生成页面时,会为每个用户会话生成一个唯一的 Token,并将其嵌入到表单或请求中。当用户提交表单或发起请求时,服务器会验证该 Token 是否与用户会话中的 Token 匹配。如果不匹配,请求将被拒绝。

2. SameSite Cookie 属性

SameSite 是 Cookie 的一个属性,用于控制 Cookie 在跨站请求时是否会被发送。设置为 Strict 时,Cookie 只会在同站请求时发送;设置为 Lax 时,Cookie 会在同站请求和部分跨站请求(如导航)时发送。

3. 验证 HTTP Referer 头部

通过检查请求的 Referer 头部,可以判断请求是否来自合法的源。如果 Referer 头部不存在或指向不信任的域名,服务器可以拒绝该请求。

4. 双重提交 Cookie

双重提交 Cookie 是一种增强的 CSRF 防御机制。服务器在生成页面时,将 CSRF Token 同时存储在 Cookie 和请求参数中。当用户提交请求时,服务器会验证这两个 Token 是否匹配。

通过以上方法,可以有效防止跨站请求伪造攻击。