Javascript CSRF令牌丢失,Ionic-AngularJS FullStack

Javascript CSRF令牌丢失,Ionic-AngularJS FullStack,javascript,angularjs,express,ionic-framework,angular-fullstack,Javascript,Angularjs,Express,Ionic Framework,Angular Fullstack,我有一个项目,其后端位于从开始的平均堆栈上,在Ionic下有一个应用程序,当我尝试从Ionic应用程序执行POST请求以进行登录时,服务器会说“CSRF令牌丢失” 即使在请求中看到它发送令牌和其他数据 POST /auth/local HTTP/1.1 Host: 192.168.1.13:9000 Connection: keep-alive Content-Length: 47 Accept: application/json, text/plain, */* X-DevTools-Emul

我有一个项目,其后端位于从开始的平均堆栈上,在Ionic下有一个应用程序,当我尝试从Ionic应用程序执行POST请求以进行登录时,服务器会说“CSRF令牌丢失”

即使在请求中看到它发送令牌和其他数据

POST /auth/local HTTP/1.1
Host: 192.168.1.13:9000
Connection: keep-alive
Content-Length: 47
Accept: application/json, text/plain, */*
X-DevTools-Emulate-Network-Conditions-Client-Id: 552547EB-CA80-4AF8-8392-DDE2A9D833A4
Origin: file://
User-Agent: Mozilla/5.0 (Linux; Android 5.1.1; E5803 Build/32.0.A.4.11; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.106 Mobile Safari/537.36
Content-Type: application/json;charset=UTF-8
Accept-Encoding: gzip, deflate
Accept-Language: en-US
Cookie: connect.sid=s%3AKpTipuTW9UAqmbx_X__fuDrfGxXiGRpF.%2FKf2gm3y%2F0VwBzUygchh7%2BVfi6PLoQZhOfI5T22XlxY; XSRF-TOKEN=iZvZ2wKb3VafJb9ZGqily3pBY3nGI9gVBQaww%3D
X-Requested-With: com.todomicilio.app

我没有修改express server的默认配置似乎您忘了在
中添加csrf令牌,用于在html中发布帖子

在您的数据中,只有Cookie中有CSRF令牌,您还需要在表单中有CSRF令牌(或者在特殊的http请求头中,这取决于保护实现)

关于跨站点请求伪造(CSRF)的几句话:

  • 如何进行CSRF攻击:
  • 想象一下,我们有一个网站“hacker.example”,我们还知道另一个网站“bank.example”是用金钱运作的。想象一下,
    bank.example
    有一个POST方法
    /send money
    ,使用
    receiver account
    参数将当前用户帐户的钱发送到另一个帐户,银行使用cookie进行用户授权

    想象一下,来自银行的用户进入黑客的网站,点击按钮将表单提交给
    银行。示例/发送钱
    带有黑客的
    接收者帐户值
    参数。所以,浏览器将向bank.example网站发出此POST请求,并为bank提供cookies。example(!),所以,如果银行没有CSRF保护,此请求将得到授权,黑客将从该用户处获得一笔钱

  • 如何保护CSRF攻击(可能的解决方案之一):
  • 您可以放置两个秘密令牌:一个在cookie中,另一个用于网站的每个帖子请求。每次用户发出post请求时,服务器都应该比较这两个令牌

  • 它为什么有效
  • 现在,
    hacker.example
    应该知道csrf令牌以发出适当的POST请求。黑客只有两种可能的方法来获取它:从
    银行的cookies中获取。例如
    ,或者从
    银行的html代码中提取csrf令牌。例如


    但是
    hacker.example
    无法访问
    银行的cookies.example
    因为安全策略和
    黑客。example
    无法获取html页面从
    银行提取csrf令牌。example
    因为。如果您不想使用csrf令牌,请禁用Lusca

    请参考下面的链接


    虽然有点晚了,但我还是想回答,因为我面临着同样的问题。 以下是问题的解决方案:

    “当express.static()服务index.html时,它会断开中间件链,并避免在/request上设置CRSF,从而在用户没有设置cookie时导致首次登录失败

    我认为这与2224、2511、2611和krakenjs/lusca有关,并且可能修复了95

    这次提交基本上将_index.html重命名为app.template.html,这更具表现力,生成的文件将是app.html,这避免了express.static()阻塞中间件链,因为不再有index.html了。因此routes.js:sendFile被有效调用


    请注意,我曾多次尝试使用webpack来寻找另一种解决方案,这是我能找到的最优雅的解决方案。”

    非常好的解释!!
    POST /auth/local HTTP/1.1
    Host: 192.168.1.13:9000
    Connection: keep-alive
    Content-Length: 47
    Accept: application/json, text/plain, */*
    X-DevTools-Emulate-Network-Conditions-Client-Id: 552547EB-CA80-4AF8-8392-DDE2A9D833A4
    Origin: file://
    User-Agent: Mozilla/5.0 (Linux; Android 5.1.1; E5803 Build/32.0.A.4.11; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/48.0.2564.106 Mobile Safari/537.36
    Content-Type: application/json;charset=UTF-8
    Accept-Encoding: gzip, deflate
    Accept-Language: en-US
    Cookie: connect.sid=s%3AKpTipuTW9UAqmbx_X__fuDrfGxXiGRpF.%2FKf2gm3y%2F0VwBzUygchh7%2BVfi6PLoQZhOfI5T22XlxY; XSRF-TOKEN=iZvZ2wKb3VafJb9ZGqily3pBY3nGI9gVBQaww%3D
    X-Requested-With: com.todomicilio.app