什么是 CSRF 攻击
CSRF(Cross-site request forgery)即跨站请求伪造,是一种网络攻击方式。攻击者利用受害者已经登录了的身份,来进行非法的操作,比如发邮件、发消息、盗取用户资料等,从而达到攻击的目的。
一般情况下,用户在访问正常网站的时候会保持已经登录的状态,而访问不正当的或者是各种攻击网站的时候,也可能带着恶意代码,攻击者就可以伪造一些正常网站的请求,让用户在不知情的情况下执行恶意操作。
CSRF 攻击的原理
攻击者首先在自己的网站上构造出一个恶意的请求链接,并保存在自己的网站上。
当用户访问攻击者的网站时,攻击者会将恶意请求链接伪装成一个正常的请求链接,放在网页中,诱导用户点击。
一旦用户点击了这个链接,就会按照攻击者的设计,向目标网站发送http请求。由于此时用户已经登录了目标网站,故服务器会认为这个请求是合法的,就会按照请求中的参数执行操作。
最终,攻击者通过伪造请求,达到非法操作的目的。
如何使用 Hapi.js 防范 CSRF 攻击
Hapi.js 是一款 Node.js 的框架,提供了一些防止 CSRF 攻击的工具,这些工具在 Hapi.js 中称为 plugins。
Hapi.js 中防范 CSRF 攻击的 plugin 为 crumb。它将生成一系列的 csrf 标志,用于验证客户端和服务器之间的请求。在用 post 方式提交表单时,客户端先请求服务器的 get 请求,来获得 CSRF Token,然后在请求中携带这个 Token,保证表单来源的可信性。
以下是使用 Hapi.js 中的 crumb 插件进行防范 CSRF 攻击的示例代码:
Step 1:安装 crumb 插件
npm install @hapi/crumb
Step 2:引入 crumb 插件
-- -------------------- ---- ------- ----- ---- - ---------------------- ----- ----- - ----------------------- ----- ------ - ------------- ----- ----- ----- ----------- --- -- --- ----- -- ----- -------- ------ - ----- ----------------- ------- ------ -------- - -------------- - --------- -------------------- --- ------------ - - --- ----- --------------- ------------------- ------- --- --------------------- - -------------------------------- ----- -- - ----------------- ---------------- --- -------
Step 3:在请求里检测 CSRF Token
-- -------------------- ---- ------- -- ---- ---- -- -------------- ------- ------- ----- ---- -------- ----- --------- -- -- - ------ ------ -------- -- -------- - -- --------- ---- ----- -------- - ------ - ---- --------------- ------- ---------- -------- ---- - - - ---
总结
CSRF 攻击是一种比较隐蔽的攻击方式,为了避免您的应用程序成为攻击者的攻击目标,建议在前端类应用中使用 Hapi.js 的 crumb 插件防范 CSRF 攻击。
在设置插件时,可以修改它的配置来实现针对不同场景的安全防御。也可以使用插件验证请求头、Cookie 或查询字符串等各种请求。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/6482f86848841e9894256140