使用骨干网和 node.js 进行 CSRF 防御

Posted

技术标签:

【中文标题】使用骨干网和 node.js 进行 CSRF 防御【英文标题】:CSRF defense using backbone and node.js 【发布时间】:2012-05-10 07:28:30 【问题描述】:

我正在使用骨干网和 node.js 创建一个网站,并且不认为默认情况下有任何针对 CSRF 的保护。将骨干与 node.js 一起使用时,是否有针对 CSRF 进行投影的标准方法? 谢谢

【问题讨论】:

【参考方案1】:

您可以简单地确保请求具有 X-Requested-By 标头和值 XMLHTTPRequest。 AJAX 请求具有跨域限制,因此如果该标头存在,则它不是例如恶意网站上的隐藏表单。

【讨论】:

这不取决于浏览器阻止跨域ajax请求吗? 您不能依赖 common 浏览器会阻止这种行为这一事实。它完全在客户端选择加入,并且不能被信任。如果我用zombie.js 实现了一个恶意客户端怎么办? @DavidEllis:你不明白 CSRF 是什么。如果您实施恶意客户端,它将没有经过身份验证的用户的 IP 或 cookie。因此,来自该客户端的请求是完全无害的。 CSRF 不是为了阻止脚本访问您的网站,而是为了防止恶意网站上的隐藏表单等使用您网站的合法用户的凭据访问您的网站。 @ThiefMaster,CSRF 预防不仅仅是为了阻止帐户访问——通过发布恶意制作的表单故意试图使您的服务器崩溃的恶意客户端不会通过检查 @987654324 来阻止@标头。最好从您不能信任客户的角度出发,并且应该平等地审查所有输入。我的问题是您对网站安全性的回应是多么轻率。 这样的客户端只会发送正确的 CSRF 令牌。【参考方案2】:

我不知道任何特定于 node.js + 骨干网的东西,但您可以使用 http://www.senchalabs.org/connect/middleware-csrf.html(假设您使用的是 express 或与连接兼容的东西)。您需要在 html 中的某处输出令牌,例如作为元标记。然后,您可以修改主干同步方法以提取该令牌并通过标头、查询或表单将其传递给 express。

【讨论】:

【参考方案3】:

如果 Allow-Origin 标头设置为允许的(例如,Allow-Origin:*X-Requested-By 将不会阻止请求伪造。在另一台主机上运行的任何 javascript 都将能够制作仍然启用请求伪造的请求。

【讨论】:

以上是关于使用骨干网和 node.js 进行 CSRF 防御的主要内容,如果未能解决你的问题,请参考以下文章

CSRF攻击原理及防御和相关漏洞复现

CSRF攻击原理及防御和相关漏洞复现

CSRF防御

安全性测试入门 :CSRF 跨站请求伪造攻击和防御

CSRF攻击/防御

转-CSRF——攻击与防御