当前位置: 首页 > 知识库问答 >
问题:

带Spring和角度2的CSRF

毋胜涝
2023-03-14

我正在尝试使用Spring Security(4.1.3)和Angular 2.0.1实现CSRF保护

相关话题的来源很多,但我找不到明确的说明。有些说法甚至相互矛盾。

我读过关于springs的操作方法(尽管指南中描述了Angular 1 way)Spring Security guide,其中包含Angular,即。csrf()。csrfTokenRepository(CookieSrftokenRepository.withHttpOnlyFalse())

一切都应该“开箱即用”。此外,《角度安全指南》将CSRF保护描述为内置。

在我的环境中,帖子如下所示:

  • 有一个OPTIONS-call返回POST、200 OK和一个XSRF-TOKEN-cookie。
  • 我的http.post添加了一个授权标头,并添加了Request estOption"有凭据"
  • 它发送三个cookie,两个JSessionID和一个与OPTIONS-call接收到的不同的XSRF-TOKEN,没有XSRF标头。
  • 调试Spring CsrfFilter显示它查找名为X-XSRF-TOKEN的标头,并将其与名为XSRF-TOKEN的cookie中的令牌进行比较。

为什么Angular不也发送标题?如果Spring只检查提供的cookie和提供的标头,而没有任何服务器端操作,那么这种安全性如何?

有一些类似的问题,但只有0票的答案似乎(对我来说)完全错误,因为根据我的理解,CSRF必须有一个cookie验证的服务器端检查。

此问题仅提供有关如何更改cookie或标头名称的信息,如此处所述

我在这里错过了什么?我怀疑Spring Security实现中存在错误,但我无法让它正常工作。

有什么想法吗?

通话后

login(account: Account): Promise<Account> {  


   let headers = new Headers({ 'Content-Type': 'application/json' });
    headers.append('X-TENANT-ID', '1');
    headers.append('Authorization', 'Basic ' + btoa(account.userName + ':' + account.password));
    let options = new RequestOptions({ headers: headers, withCredentials:true });
   return this.http.post(this.loginUrl, account, options).toPromise()
  .then(this.extractData)
  .catch(this.handleError)

}

Spring Security配置

 [] csrf().csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse())


共有1个答案

燕朝明
2023-03-14

问题是应用程序路径。Spring可以选择在其管道中设置cookie路径,但尚未发布。

我必须为CsrfTokenRepository编写自己的实现,它将接受不同的cookie路径。

这些是相关位:

public final class CookieCsrfTokenRepository implements CsrfTokenRepository

private String cookiePath;

 @Override
public void saveToken(CsrfToken token, HttpServletRequest request, HttpServletResponse response) {
    String tokenValue = token == null ? "" : token.getToken();
    Cookie cookie = new Cookie(this.cookieName, tokenValue);
    cookie.setSecure(request.isSecure());
    // cookie.setPath(getCookiePath(request));
    if (this.cookiePath != null && !this.cookiePath.isEmpty()) {
        cookie.setPath(this.cookiePath);
    } else {
        cookie.setPath(getRequestContext(request));
    }

    if (token == null) {
        cookie.setMaxAge(0);
    } else {
        cookie.setMaxAge(-1);
    }
    if (cookieHttpOnly && setHttpOnlyMethod != null) {
        ReflectionUtils.invokeMethod(setHttpOnlyMethod, cookie, Boolean.TRUE);
    }

    response.addCookie(cookie);
}

public void setCookiePath(String path) {
    this.cookiePath = path;
}

public String getCookiePath() {
    return this.cookiePath;
}
 类似资料:
  • > 到目前为止,我使用角2快速入门创建了一个新项目。 我决定开始使用angular 2 cli,并创建了一个新的angular 2 cli项目。 移动了我的所有文件并重新安装了所有软件包。 现在,当我试图在CLI项目中使用角2材料时,我遵循了这里的指南,但这是我得到的: 会出什么问题?

  • 后端的这两个模型在前端有它们的对应。我添加_links部分是因为Spring Rest api提供链接而不是外键: 我根据从API获得的信息创建了这些模型。例如,localhost:8080/api/b/1上的get请求给出: 我可以使用下面所示的angular 2服务方法轻松地在表A中插入新行(因为它不包含外键): 在Spring中,当我试图将新行插入到表B中时,会出现以下错误: 我想知道htt

  • 我有一个单页角应用与Spring引导。它看起来如下所示: Spring Boot正确地默认为webapp文件夹,并为index.html文件服务。 我想做的是:

  • 我实际上正在学习Angular2,但我遇到了一个...CSS问题o_O我曾搜索过一个类似的问题,但没有任何成功,现在开始: 我在中有一个标记元素 我在div中设置了并使用来适应,但似乎根本不起作用,图片不适合div。 我很困惑因为这是第一次发生在我身上 请参阅:我使用styleUrls在组件中注入css规则 代码 谢谢!

  • 编辑问题包括期望的行为, 我正在编写一个Angular 2应用程序,我不明白为什么Angular不能正确使用

  • 问题内容: 您好,我正在尝试在我的应用程序中实现加密。我在前端使用angular(angular-4),在后端使用node js。通过socket.io通过自定义命令进行通信。但基本上,我坚持要在客户端中找到用于RSA加密的适当库。客户端将首先向服务器请求RSA公钥。服务器用密钥响应,但是现在我找不到任何适合使用此公共密钥通过RSA加密数据的库。我已经尝试过node- rsa。以下是代码sn 但我