quilt code

[spring] csrf 본문

daily/SPRING

[spring] csrf

김뱅쇼 2023. 5. 22. 21:23

aside.jsp 코드 중간에 csrf가 있었다....

뭔가 쓴 기억은 나는데 정확하게는 몰라서 정리하는 포스트

 


코드) 



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<script type="text/javascript">
$(function(){
    $("#imgMember").on("click",function(){
        let memId = "${principal.memberVO.memId}";
        
        console.log("memId : "+ memId);
        //JSON 오브젝트
        let data = {"memId":memId};
        console.log("data : " + JSON.stringify(data));
        //contentType : 보내는 타입
        //dataType : 응답 타입
        //스프링 시큐리티 사용시 추가해야 할 내역 : 데이터 전송 전 헤더에 csrf(cross site request forgery)값 설정
        $.ajax({
            url : "/member/detailMember",
            contentType : "application/json;charset:utf-8",
            data : JSON.stringify(data),
            type : "post",
            dataType : "json",
            beforeSend : function(xhr){
                xhr.setRequestHeader("${_csrf.headerName}","${_csrf.token}");
            },
            success : function(result){
                //result : memberVO
                console.log("result : " + JSON.stringify(result));
                //card title
                $("#modalTitleMemName").html(result.memName);
                //회원 아이디
                $("#modalMemId").val(result.memId);
                //회원 이름
                $("#modalMemName").val(result.memName);
                //권한 정보
                //"memberAuthVOList":[{"memId":"admin","auth":"ROLE_ADMIN"},{"memId":"admin","auth":"ROLE_MEMBER"}]}
                //result.memberAuthVOList : List<MemberAuthVO>
                console.log("result.memberAuthVOList : " + result.memberAuthVOList);
                
                let str = "";
                $.each(result.memberAuthVOList, function(index, memberAuthVO){
                    let auth = memberAuthVO.auth;
                    //누적
                    str += auth + " ";
                });
                $("#modalAuth").val(str);
                
                //회원 증명 이미지
                //<img src="" id="modalMemImg" class="form-control" style="width:90%;" />
                $("#modalMemImg").attr("src","/resources/upload" + result.memImg);
            }
        });
    });
});
 
</script>
cs

 

스프링 시큐리티 사용시 추가해야할 내용 : 데이터 전송 전 헤더에 csrf(cross  site request forgery)값 설정하라고  있음..

구글에서 검색한건 csrf 공격이라고 함

사이트간 요청 위조라고 하는데 이거 왠지 정처기에서 봤던 것 같다

"사용자가 웹사이트에 로그인한 상태에서 사이트간 요청 위조 공격 코드가 삽입된 페이지를 열면 

공격 대상이 되는 웹사이트는 위조된 공격 명령이 믿을 수 있는 사용자로부터 발송된 것으로 판단되어 공격에 노출된다.."

라고 함

방어하는 방법은 여러가지가 있는데 수업 시간엔 아마도 make token & check 방법을 이용한 것 같음

로그인 시 auth token값을 생성해서 세션에 넣어두고 화면에선 해당 토큰을 빼내어서 hidden 값에 넣는.. 뭐 그런..

 

참고 블로그 : https://doctorson0309.tistory.com/605

 

 

'daily > SPRING' 카테고리의 다른 글

[spring] 오늘의 에러  (0) 2023.05.23
[spring] 스프링 시큐리티  (0) 2023.05.22
[spring] 모달  (0) 2023.05.22
[spring] 오늘의 에러  (0) 2023.05.22
[spring] 스프링 시큐리티에서 submit할 때  (0) 2023.05.22