Express.js 的跨站请求伪造 (Cross-Site Request Forgery,CSRF) 防御技巧

阅读时长 3 分钟读完

什么是跨站请求伪造?

跨站请求伪造,英文名为 Cross-Site Request Forgery (CSRF),是指攻击者利用用户已登录的身份,在用户不知情的情况下向服务器发送恶意请求,从而实现攻击的目的。攻击者通常会将伪造的请求嵌入到一些可信站点或者电子邮件中,诱使用户点击执行。

CSRF 的危害

攻击者通过 CSRF 攻击可以完成以下操作:

  1. 利用用户已登录的身份,完成对用户账户的操作,例如修改密码、转账等;
  2. 在用户不知情的情况下,向网站发送一些请求来破坏网站的中立性。

总之,CSRF 攻击会破坏用户账户的安全性,危及网站本身的安全。

防御 CSRF 攻击的方法

为了防范 CSRF 攻击,需要合理地使用各种防御技术。以下列出了一些有效的防御 CSRF 攻击的方法:

一、使用 token 防御 CSRF

在每个请求中加入随机的 token 参数,并在服务端验证该参数的合法性。这样,攻击者将不再能够构造任意有效的请求,从而实现防御。

示例代码:

-- -------------------- ---- -------
-- -- -----
----- ----- - -------------------------------------------------
---------------- ----- ---- ----- -
  ---------------- - -----
  ------
--

-- -- ----- 
------------------------ -------- ----- ---- ----- -
  ----- ----- - --------------
  -- ------ --- ------------------ -
    -- -----------
  - ---- -
    -- ---------
    -------- -------------- ---- --------
  -
--

二、使用 SameSite Cookie 属性防御 CSRF

SameSite 是发生在 Cookie 中的属性,它定义了浏览器发送 Cookie 的规则。在使用 SameSite 属性时,必须加上 Secure 使之成为安全的。这样,系统可以通过 SameSite 属性屏蔽掉来自不受信任的站点的请求,从而实现防御 CSRF 攻击。

示例代码:

-- -------------------- ---- -------
-----------------
  ------- ------- -----
  ------- ------
  ------------------ -----
  ------- -
    --------- --------- -- -----------
    ------- ---- -- ---- ----- -------- ------
  -
---

三、利用 Referrer 策略防御 CSRF

Referrer 是在用户浏览网页时,浏览器自动发送的一种 HTTP 头信息字段。如果 Referrer 来自不受信任的网站,则浏览器会阻止非同源站点之间的数据传输,从而防止 CSRF 攻击。

示例代码:

总结

CSRF 攻击是一种常见的网络安全威胁,攻击者可以在用户不知情的情况下发送恶意请求以达到攻击的目的。为了防范 CSRF 攻击,可以使用所列出的一些防御技术,例如同源检查、验证 token、使用 SameSite 策略等。开发人员可以根据实际情况选择适合的方法进行防御,保护用户账户和网站本身的安全。

来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/64e71febf6b2d6eab327d0ff

纠错
反馈