防止跨站请求伪造攻击(Cross-Site Request Forgery,以下简称 CSRF)是一种常见的网络安全问题。攻击者通过伪装成受信任的用户身份,向应用程序发送恶意请求,从而窃取用户的敏感信息或执行不当操作。在 Hapi 应用程序中采取适当的防范措施可以有效地避免这种攻击。
Hapi 中的 CSRF 攻击
在 Hapi 中,防范 CSRF 攻击的最简单的方式是使用 crumb 插件。crumb 插件通过为每个 POST 请求生成一个唯一的 CSRF 标记,然后将其嵌入请求的正文中,来验证表单是否来自同一站点。服务器随后检查是否收到了针对 CSRF Token 的有效请求,并防止攻击者使用不同的来源或规避此限制。
使用 Hapi 的 crumb 插件非常简单,只需要使用以下代码:
----- ---- - ---------------------- ----- ----- - ----------------------- ----- ------ - --- ------------- ----- ----- ----- ----------- --- ----- ---- - ----- -- -- - ----- ----------------------- -- ------ ---- ---- ------------------------ --------- -- -- - -- --------------- --- ------- - ---------------------------------------- -- --------------------------------------- --- - ------ ----------- --- -- ------ ----- --------------- -- -------
在 crumb 插件注册之后,服务器通过用 server.ext()
方法处理请求。在这个示例中,我们使用 onPostAuth
插件点来检查是否存在 POST 请求,如果是,则检查 crumb 插件是否启用并验证请求是否合法。如果合法,h.continue 表示要执行其他的路由处理,否则返回错误响应。
CSRF Token 与 XSRF-TOKEN 的对应关系
默认情况下,crumb 插件将 CSRF token 嵌入名为 X-CSRF-Token 的标头中,且 token 的值将嵌入响应的 Cookie 中名为 XSRF-TOKEN。这是 crumb 插件的默认设置,可以通过配置选项进行更改。
----- ------------ -- -------- ----- ---- ---------------------- --------------- --------- --------------- ----------------- ---- - - -- - ----- -- ----------- -------------- -- ----- ----------------- ------- ----------------------- -------- ------------- ---
在这个示例中,我们将 CSRF token 的键名改为 CSRF_Extreme_Secret
,将 Cookie 的默认选项改为非安全的,将标头名改为 X-XSRF-Token
。
参考官网 API Crumb。
指导意义
使用 crumb 插件可以有效避免 CSRF 攻击,但是在实际项目中也要注意以下问题:
- 配置正确的 Cookie 安全选项,对于敏感信息,应设置 cookie 的 isSecure 标志设置为 true,因为标志设置为 true 会将通信协议限制为 HTTPS。
- 不应在表单或请求参数中公开敏感信息。
- 应确保会话过期并及时接收到反应。即使在会话过期之前,也应该在电子邮件或其他通道上通知用户在他们的帐户中发生了什么。
总结
CSRF 攻击经常出现在现代 Web 应用程序中,而 crumb 插件是防范这种攻击最简单和最有效的方式之一。在 Hapi 应用程序中实现防止 CSRF 攻击非常简单,只需要在每个 POST 请求中添加 CSRF token 即可。在实际应用中也要注意设置正确的 Cookie 安全选项和避免敏感信息的泄漏等问题。
来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/646b300a968c7c53b0a995c9