【问题标题】:How to add csrf token in ExtJS ajax call?如何在 ExtJS ajax 调用中添加 csrf 令牌?
【发布时间】:2017-11-29 15:23:31
【问题描述】:

在我的应用程序中,我同时拥有使用 Ext JS 5.1 的 JSP 和 JS。我需要对我的应用程序应用 spring csrf 保护。 在 Jsp 中,我可以将其添加如下:

 <body>
            <input type="hidden" name="${_csrf.parameterName}"  value="${_csrf.token}">
    </body>

但我不确定如何在 .js 文件中执行此操作?我是否也为 ext js 声明了 Meta 标签?我需要将 csrf 令牌应用于每个 ajax 请求。

只是为了强调,我已经扫描了许多网站,但没有得到任何适当的解释或工作示例。如何在 Ext js .js 文件的 ajax 调用中添加 csrf?

【问题讨论】:

  • I need to apply the csrf token to every ajax request. -> 也许this question/answer 可以帮忙。
  • 嗨@Alexander,我的问题是我应该如何阅读 .js 文件中的 _csrf.parameterName 和 _csrf.token ?
  • 在我看来,这些是在JSP 中被服务器在 发送给客户端之前替换的服务器变量。因此,您必须通过服务器端 API 将这些值输入前端。所以这个问题根本不是 ExtJS 特有的,我来这里是为了 ExtJS 标记。您可能想用 JSP 标签提出一个关于如何将 CSRF 值导入 JSON API 的新问题。
  • 嗨@Alexander,您说得部分正确。但是我可以像问题中提到的那样成功地在 jsp 中读取这些变量。我在 extJS 的 .js 文件中获取这些变量时遇到问题。所以更具体地说,这个问题是“如何在 ExtJS 5.1 中启用 scrf?”

标签: ajax jsp extjs csrf csrf-protection


【解决方案1】:

我能够做到以下几点。将下面的 sn-p 添加到您的 app.js 或 ext js 应用程序的 Application.js 中。

Ext.Ajax.on('beforerequest', function(conn, options) {
    var x = document.getElementsByTagName("META");
    var token = "";
    var headerVal = "";
    var i;
    for (i = 0; i < x.length; i++) {
        if (x[i].name == "_csrf") {
            token = x[i].content;
        } else if (x[i].name == "_csrf_header") {
            headerVal = x[i].content;
        }
    }

    Ext.Ajax.setDefaultHeaders({
        headerVal: token
    });
});

或

Ext.Ajax.on('beforerequest', function(conn, options) {
    var x = document.getElementsByTagName("META");
    var token = "";
    var headerVal = ""; 
    var i;
    for (i = 0; i < x.length; i++) {
        if (x[i].name == "_csrf")
        {
             token = x[i].content;
        }
    }

   // Ext.Ajax.defaultHeaders = Ext.apply(Ext.Ajax.defaultHeaders || {}, { headerVal : token });
    Ext.Ajax.setDefaultHeaders({
        'X-CSRF-TOKEN':token
    });
});

【讨论】:

  • 此解决方案仍然无法通过 Fortify 扫描。
猜你喜欢
  • 2016-09-19
  • 1970-01-01
  • 1970-01-01
  • 2018-12-31
  • 2019-11-30
  • 2018-09-22
  • 1970-01-01
  • 2017-01-08
  • 2013-11-15
相关资源
最近更新 更多