问题标签 [x-xsrf-token]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1106 浏览

safari - Safari 11 X-XSRF-TOKEN 刷新后未更新

最近 Safari 11 在 Mac OSX 上发布。此更新导致我们的 web 应用程序与我们 reuest 标头上的 XSRF 相结合出现问题。我将尝试以逻辑的方式描述问题。好的情况是这样的:

  1. 当用户想要登录时,他会收到来自服务器的响应,其中包含一个包含 XSRF 令牌值的 Set-Cookie。 Eg: Set-Cookie: XSRF-TOKEN=LKNBX4DZhL708KjXNkgXnlxTDCNuhsZG1kTc2SFy498; Path=/; Secure

  2. 页面刷新 将执行的下一个调用在标头中包含正确的 XSRF 值。在服务器端检查值等。来自前端的每个调用都将包含该 XSRF 令牌。

  3. 如果用户注销并想再次登录,他的 XSRF cookie 将被一个新值覆盖,并且能够使用该令牌登录。

我们有问题的情况(在 Mac OSX 上使用 Safari 11,其他浏览器不显示此行为):

  1. 如果不存在cookies,用户可以正常登录

  2. 但是,如果他想重新登录(在前一个会话之后),就会发生刷新。在第一次调用时,在他的调用中刷新 XSRF 令牌不会被新值替换,它们仍然包含上一个会话中的旧 XSRF 令牌。当我们检查这个请求时,我们看到这个请求上的 cookie 包含正确的值,但标头反映的是旧令牌。

  3. 这个带有错误标头的调用会导致后端的会话关闭,因此用户被踢出会话。TLDR;在 Safari 11 中,标头 XSRF-TOKEN 在刷新后不会相应地更新为 cookie 值。我们在旧版本和其他浏览器上进行了这项工作,我们认为这是 Safar 11 的错误。

有没有其他人遇到过类似的问题?在 Safari 11 中刷新页面后,请求的标头值在哪里不更新?

编辑:经过测试,我们发现在 URL 中放置时间戳作为查询参数会强制 Safari 11 发送正确的请求。似乎一些请求被缓存并且更新的标头被忽略了..

非常感谢!

0 投票
1 回答
9015 浏览

angular - 如何在angular4中发送带有响应头的“X-CSRF-TOKEN”

我目前正在开发一个 Angular4 应用程序。现在我想实现 XSRF 保护。在响应头 cookie 中,我得到“XSRF-TOKEN”,我需要在下一个请求头 cookie 中发送“X-XSRF-TOKEN”。正如Angular 官方文档中提到的,Angular 正在处理这个问题。但就我而言,角度并没有处理它。所以我创建了以下自定义 XsrfInterceptor 来附加“X-XSRF-TOKEN”和响应头。

在我的主模块中,我将它包含在提供程序中,

但不幸的是,它不起作用。我认为我的应用程序没有调用自定义拦截器的拦截方法(它没有打印 console.log('xsrf 拦截器调用'))。

我的http标头如下:

在响应标头中:

下一个请求标头:

我正在使用以下版本的角度库:

0 投票
1 回答
8083 浏览

spring-security - Angular 5 无法从 HttpXsrfTokenExtractor 获取 XSRF 令牌

我正在尝试通过绝对 URL向 Spring(基本身份验证)安全的 Rest API 发出 POST 请求。
在阅读了 Angular 省略了将X-XSRF-TOKEN自动插入到绝对 URL 的请求标头中之后,我尝试实现一个HttpInterceptor来添加令牌。

在我的原始/signin POST 请求中,我创建了必要的授权:基本标头以确保 Spring 对请求进行身份验证。
返回的响应标头包含预期的set-cookie令牌:

Set-Cookie:XSRF-TOKEN=4e4a087b-4184-43de-81b0-e37ef953d755; Path=/

但是,在我的自定义拦截器类中,当我尝试从注入的HttpXsrfTokenExtractor获取下一个请求的令牌时,它返回null

这是我的拦截器类的代码:


tokenExtractor.getToken()在上面的代码中返回 null。我希望它能够从我之前的/signin请求 的 Spring (Set-Cookie) 响应标头中返回令牌。

我阅读了有关创建拦截器的相关帖子:
angular4 httpclient csrf does not send x-xsrf-token

但除此之外,我无法找到 HttpXsrfTokenExtractor 的很多文档:
https

://angular.io/api/common/http/HttpXsrfTokenExtractor 问题:为什么HttpXsrfTokenExtractor.getToken()返回 null?

此外,我将拦截器类添加为app.module的提供者。
这是我的 app.module.ts:


另一件需要注意的事情是,我从localhost:3000在 Node.js 上运行我的 Angular 前端,从localhost:8080运行我的 Spring Rest 后端。它们位于不同的端口上,因此使用绝对 urls发出 http 请求的原因。当来自对不同域的请求的响应时, 浏览器会阻止Set-Cookie工作吗?

我还能错过什么吗?

感谢您的任何帮助。

----------------------------------------------
[更新于 1 月 7 日2018]

修复

我使用Webpack 开发服务器来提供 Angular 代码。我通过为指向我的后端 Rest API 的 url配置代理解决了这个问题。

这意味着从浏览器发出的所有请求现在只能发送到端口3000的开发服务器,即使是对于 Rest API 调用也是如此。
webpack 开发服务器看到任何带有配置模式的请求 url(例如 /api/...)时,它会替换为对http://localhost:8080上的后端服务器的调用(在我的例子中)。

这是我添加到 webpack.dev.js 的devServer部分的内容文件:



有了这个设置,我不再从 Angular 代码发出跨域(跨域)请求,也不再使用绝对 URL。这极大地简化了事情,因为我不再与 Angular XSRF (CSRF) 机制作斗争。它只是默认工作。我也不需要使用HttpInterceptor手动插入X-XSRF-TOKEN

设置开发服务器代理的额外好处是客户端请求不再是绝对的,因此我不需要更改所有用于生产的 Rest API 调用。

我希望这对遇到同样问题/理解的人有用。

Webpack 开发服务器代理文档参考:
https ://webpack.js.org/configuration/dev-server/#devserver-proxy

0 投票
1 回答
2274 浏览

c# - 分布式 SPA 应用程序中的防伪令牌

我正在开发一个分布式高可用性单页应用程序,该应用程序由 docker 节点集群提供服务。有时一个节点会死掉(出于完全正当的原因,所以这不是问题)。然后,所有客户端都会无缝地重新路由到其他节点之一。不幸的是,它们的所有 XSRF 令牌都无效,因为它们存储在客户端的内存中。

因此,问题是,我们如何在基于 *nix 的设置中分配当前 XSRF 令牌的存储?

0 投票
1 回答
1264 浏览

c# - Antiforgery.Validate() 似乎不起作用?CSRF 问题

我已将下面的代码放在我的表单中。然后,该请求将在其 cookie 中显示一个令牌,并且在生成我的 html 时还会创建一个隐藏字段。请注意,cookie 和隐藏字段都有不同的值。

每次我回发时,我都有下面显示的验证器。

  1. 奇怪的是,即使我强行更改隐藏字段中的 cookie(使用 burp 之类的 MITM 软件)。验证器甚至不会检测到令牌已被更改。

  2. 我已经列出了生成的令牌(刷新页面几次)并尝试使用列出的令牌之一来操作最新的请求。毫不奇怪,验证器没有发现错误。

  3. 我读到令牌是基于会话的,所以我尝试在另一个会话(另一个用户)上使用令牌。而且,验证器仍然没有捕获任何东西。

  4. 更改 cookie 中的令牌会捕获错误,但该 cookie 令牌是恒定的,并且对于所有表单都是相同的。

这个问题有什么问题或任何其他缺失的部分吗?

0 投票
0 回答
660 浏览

angularjs - 如何使用angularJS实现spring security默认CSRF保护

我有一个 spring boot 应用程序,我用 spring security 保护了它。现在我想保护它免受 CSRF 漏洞的影响,所以我将这一行添加到我的 spring 安全配置中:

对于客户端,我使用的是 angularJS 1.6。我将这两行添加到我的 app.js 文件中:

现在,当我尝试执行某些请求时,我得到了未经授权的状态,
我认为我遗漏了一些东西,有人可以帮助我吗?

---- 更多细节:这是我的 spring 安全配置:

0 投票
1 回答
802 浏览

c# - ASP.NET Core WebAPI:验证提供的防伪令牌失败。交换了 cookie 令牌和请求令牌

在我的 ASP.NET Core 2 WebAPI 应用程序中,我想将 AntiforgeryToken 用于我的 POST、PUT 和 DELETE 控制器方法。Reagrding to this documentation我设置了我的班级的ConfigureServicesConfigure方法。Startup在客户端,我使用 Angular 5 及其 Antiforgery 的默认配置。我无法弄清楚问题出在哪里。

这是我的 Startup.cs 的摘录

我的控制器都是这样的:

0 投票
0 回答
155 浏览

angularjs - 来自 ASP.Net 的带有 XSRF-TOKEN 的 AngularJS 返回 400

我有一个非常奇怪的问题,试图在 ASP.Net Core 中的角度 $http post 调用上实现 XSRF。

POST Register 工作正常并具有以下签名:

但是 POST Logout 返回具有相同签名的 400:

配置服务:

配置:

角度调用如下所示:

API 位于同一解决方案中的单独项目中。帮助 :)

0 投票
1 回答
1261 浏览

angular - .NET CORE API with Angular 4 - 交换了 cookie 令牌和请求令牌

尝试使用 Angular 和 .NET CORE 实现 XSRF 时,我不断收到此消息:“验证提供的防伪令牌失败。cookie 令牌和请求令牌已交换。” 我在 Angular 和 API 中配置了相同的 cookie 和标头名称。有人有想法么?

过程

Angular 对该 API 方法进行初始调用以检索 cookie

然后 Angular 拦截下一个 POST 请求并稍微覆盖默认的 XSRF 处理,因为我需要它来处理 HTTPS URL

0 投票
1 回答
313 浏览

cookies - 无法在 Angular JS 1.5.5 中读取 XSRF-TOKEN cookie

为了保护应用免受 CSRF 攻击,我们从服务器端设置了一个名为XSRF-TOKEN的 cookie。因此,我们可以从客户端代码设置cookie并发送到服务器,但是要在服务器端验证CSRF,我们需要在触发“POST”服务调用时发送标头。根据角度文档,$http 通过读取 cookie 自动设置标题X-XSRF-TOKEN(请参阅链接),但是尽管我们已将应用程序部署在同一域上,但 Javascript 代码无法读取 cookie。服务器端 cookie 生成代码和服务部署细节如下,

UI 部署在 8080 端口,服务部署在同一 VM 内的 8084 端口