加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

使用X-XSRF-TOKEN(如angularjs)标头重新确保CSRF保护

发布时间:2020-12-17 17:14:50 所属栏目:安全 来源:网络整理
导读:我正在尝试使用重新安全的 Spring安全身份验证编写Web集成测试.该应用程序使用AngularJS和Spring Boot. 由于我使用AngularJS,CSRF保护是通过X-XSRF-TOKEN标头和XSRF-TOKEN cookie完成的(据我所知,它的默认值为angular). 如何配置restassured生成并使用表单身
我正在尝试使用重新安全的 Spring安全身份验证编写Web集成测试.该应用程序使用AngularJS和Spring Boot.
由于我使用AngularJS,CSRF保护是通过X-XSRF-TOKEN标头和XSRF-TOKEN cookie完成的(据我所知,它的默认值为angular).

如何配置restassured生成并使用表单身份验证发送此令牌?现在我有这样的事情:

given().auth().form("user","password",new FormAuthConfig("login","username","password").sendCsrfTokenAsHeader()).when().get("/index.html").then().log().all().statusCode(200);

但是在日志中,我发现在将凭据发布到/ login时,CSRF令牌无效.

解决方法

您需要在发布之前进行2次GET,以便在您的其他客户端和测试类中使用spring security CSRF保护.

>发出GET请求登录.这将返回JSESSIONID标记和XSRF-TOKEN标记.如果你使用返回的XSRF-TOKEN进行POST,它将失败,因为我们使用空/假JSESSIONID.
>使用先前请求中的JSESSIONID从第二个GET获取有用的XSRF-TOKEN.
>现在您可以使用XSRF-TOKEN进行POST.

示例如何在放心使用X-XSRF-TOKEN时使用CSRF保护:

//1) get sessionId
Response response =
        given().auth().preemptive().basic(userName,userPassword).contentType(JSON).
        when().get(PREFIX_URL + "/users/user").
        then().log().all().extract().response();
String jsessionidId =  response.getSessionId();//or response.cookie("JSESSIONID");

//2) get XSRF-TOKEN using new/real sessionId
response =
        given().
        sessionId(jsessionidId).//or cookie("JSESSIONID",jsessionidId).
        contentType(JSON).
        when().get(PREFIX_URL + "/users/user").
        then().log().all().extract().response();

//3) post data using XSRF-TOKEN
given().log().all().
        sessionId(jsessionidId).//or cookie("JSESSIONID",jsessionidId).
        header("X-XSRF-TOKEN",response.cookie("XSRF-TOKEN")).
        queryParam("pos",pos.getId()).
        queryParam("date",date).
        queryParam("group_id",itemGroup.getId()).
        body(orderItems).
        contentType(JSON).
when().
        post(PREFIX_URL + "/orders/orderitems").
then().
    log().all().assertThat().statusCode(200);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读