• 카테고리

    질문 & 답변
  • 세부 분야

    풀스택

  • 해결 여부

    미해결

ajax csrf 토큰 설정 문의 드립니다.

22.07.23 22:26 작성 조회수 258

1

if(!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type)){                    
    x.setRequestHeader("X-CSRFToken", csrf_token);                    
}

영상중 위 코드 중에서 if문 로직을 이해 못해서 질문 드려요


질문1. 
if(!/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type))

if문중 s.type 을 출력해보니 "post"로 console에 나옵니다

제가 생각하기에
/^(GET|HEAD|OPTIONS|TRACE)$/i.test(s.type)   이건 false고
앞에 !를 붙여서
false가 true로 변하게 되는것 같습니다 >> 제가 생각 하는게 맞는지 궁금합니다.

질문2. 
질문1의 제 생각이 맞다면 s.type이 post면 if문이 작동하고
s.type이 get이면,  csrf 토큰 설정이 안되는것이라고 생각 해도 되나요?

get방식은 왜, 토큰 설정을 하지 않을까요?

 

질문3.  
14분 22초 영상 말씀을 빌리자면 "세팅타입이
GET이나 HEAD나 OPTIONS나 TRACE중 하나면,   x객체에 csrf토큰을 추가"한다고 말씀해 주셨습니다.

혹시 "GET이나 HEAD나 OPTIONS나 TRACE중 하나가 아니면, x 객체에 csrf토큰을 추가 하는게 맞는게 아닌지 궁금합니다"

질문4. if문에서
끝부문 .test(s.type)는 
.test 앞에 있는 객체나 값들이 s.type 이 맞는지 확인하여
맞으면 true
틀리면 false를 주는 메소드라고 생각해도 되는지 궁금합니다.

항상 좋은 강의 늘 감사드립니다

 

답변 1

답변을 작성해보세요.

1

전체 질문에 대한 답변을 드리자면...

말씀하신 내용이 맞습니다. 강좌에 약간 오류가 있는데 정확하게 이야기하자면 HTTP프로토콜 방식에서 GET|HEAD|OPTIONS|TRACE 가 아닌 상태면 POST, PUT, DELETE 등이 남을텐데 이런 경우에 csrf 토큰을 설정하기 위해서 그렇게 사용하고 있는 내용이고 이해하신 부분이 맞습니다.

GET방식은 어차피 URL로 직접 접근이 가능한 요소라서 csrf 토큰 방어자체가 의미가 없습니다만 post 같이 내부적으로 데이터를 전송하는 프로토콜은 만약 웹브라우저가 아닌 프로그램을 작성해서 해당 POST페이지에 직접 데이터를 전송함을 방지하기 위함이라고 보시면 됩니다. 

다시 설명하자면 post페이지의 정상 접근은 A를 통해 B(post대상)를 접근하는게 일반적인데 만약 어떤 요청이 A를 통하지 않고 직접 B(post대상)을 접근하는것을 막기위해서 A에서 발행된 csrf토큰을 B에서 확인하는 개념이라고 생각할 수도 있습니다.

그리고 test()함수는 객체의 값을 확인하는 용도가 아닌 그냥 자바스크립트 정규식 표현법을 사용한 부분입니다. 정규식은 문자열을 대상으로 하며 자세한 내용은 링크로 대체하겠습니다.

자바스크립트 정규식 test

 

도움이 되셨으면 좋겠습니다. 더 궁금하시거나 부족한 부분이 있으면 질문 주시기 바랍니다.