gpt4 book ai didi

java - 我如何在java中安全地实现CSRF token

转载 作者:行者123 更新时间:2023-12-01 10:50:58 26 4
gpt4 key购买 nike

问题背后的问题:我试图在我的java web应用程序中防止csrf攻击,为了实现它,我尝试了X-CSRF-Token的实现,每当发出请求时,请求都会像这样传输:

POST /sessions HTTP/1.1
Host: sample.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
X-CSRF-Token: Ma7g2c5tpeJGcenBa0S4rGtPaHLe2o+kO5AXz+Uk2WnpaTp1J9jdZMPcE1mMSLxZ/7BA1nCBxvLKiZwtepKdoA==
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: https://sample.com
Content-Length: 67

现在,作为攻击者,我尝试实现的目标是,我拦截了 post 请求,而不是攻击 token ,而是尝试攻击参数,例如请参阅以下请求:

POST /sessions HTTP/1.1
Host: sample.com
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:42.0) Gecko/20100101 Firefox/42.0
Accept: */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
testX-CSRF-Token: Ma7g2c5tpeJGcenBa0S4rGtPaHLe2o+kO5AXz+Uk2WnpaTp1J9jdZMPcE1mMSLxZ/7BA1nCBxvLKiZwtepKdoA==
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
X-Requested-With: XMLHttpRequest
Referer: https://sample.com
Content-Length: 67

当我尝试上述请求时,CSRF token 实现失败,我能够成功绕过 csrf 注入(inject),

缓解此类攻击的最佳方法是什么?csrf 注入(inject)是否有效?我如何优化我的 java web 应用程序以防止此类攻击?

我如何实现java代码:

在我的 xml 中:

<http>
<!-- ... -->
<csrf disabled="true"/>
</http>

在我的代码中:

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.csrf().disable();
}
}

提交表单时:

<c:url var="logoutUrl" value="/logout"/>
<form action="${logoutUrl}"
method="post">
<input type="submit"
value="Log out" />
<input type="hidden"
name="${_csrf.parameterName}"
value="${_csrf.token}"/>
</form>

我还遵循了 here 提供的推荐方法,在上述情况下,csrf 失败,缓解措施可能是什么?

最佳答案

根据 spring 的文档,您可以注入(inject)自定义 RequestMatcher 来验证 CSRF token 的 HTTP 请求。 Spring 为您提供了覆盖默认值的功能。

参见第 16.6 节 http://docs.spring.io/spring-security/site/docs/current/reference/html/csrf.html

class CSRFRequestMatcher implements RequestMatcher{
public boolean matches (HttpServletRequest req){
//Check if request contains valid header name & header value
}
}

关于java - 我如何在java中安全地实现CSRF token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910403/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com