Javascript 使用Ajax的CSRF令牌无效

Javascript 使用Ajax的CSRF令牌无效,javascript,ajax,csrf,Javascript,Ajax,Csrf,我使用纯javascript访问用Spring构建的某些web服务。当我尝试对其中一个服务使用Ajax Post调用时,我遇到了CSRF的问题 Ajax调用由以下几行组成: var data = {'attribute1':'1','attribute2':'2'}; $.ajax({ type: "POST", url: url, data: data, success: function(data) { if (typeof i

我使用纯javascript访问用Spring构建的某些web服务。当我尝试对其中一个服务使用Ajax Post调用时,我遇到了CSRF的问题

Ajax调用由以下几行组成:

var data = {'attribute1':'1','attribute2':'2'};

$.ajax({
    type: "POST",
    url: url,
    data: data,
    success: function(data)
    {   
        if (typeof inputId !== 'undefined') {
            $("#"+inputId).val(JSON.stringify(data));
        }
        console.log(JSON.stringify(data));    
    }
  });
我一直在搜索web,但我所发现的只是更新后端(JSP、PHP)以填充表单中的属性“${{u csrf.parameterName}”。
但是,我没有使用任何后端,所有页面都是HTML和javascript。

CSRF_令牌是由您的web框架/服务器发送并存储在浏览器中的cookie。通常,当您通过ajax调用发布时。。。您需要将该CSRF_令牌值作为JSON数据的一部分发送。要做到这一点。。。您需要使用JavaScript查找cookie名称并获取值。然后,您需要将该值分配给服务器希望看到的正确变量名。比如说,

var data = { crsf_token_name_server_expects: csrf_token_value_I_obtained };
CSRF_令牌用于确保与您的api通信的人在尝试向其发布数据之前实际访问了您的站点并创建了有效会话。google.com上的用户不能发布到stackoverflow.com,除非stackoverflow.com设置了一个称为cors头的东西,允许google.com和stackoverflow.com之间的通信通过


根据你的问题。。。你说你正在发布一个由JavaSpring支持的后端api。这个api需要一个csrf_令牌,所以它听起来像是一个api,只应该用于安装此服务的域名。例如,一个用户进入google.com并在www.google.com/url\u to\u POST\u to/上发表文章。谷歌将确保CSRF_令牌与此请求一起发送。。。因为他们不希望人们随意访问这个api url。。。没有有效的谷歌会话。

谢谢您的解释。我真正需要知道的是这两件事,服务器期望的名称和实际的令牌。我一直在做进一步的研究,很明显,Spring默认情况下会让客户端看不到这个令牌。因此,如果您不使用他们的技术(JSP),则需要禁用它。