로그인 CSRF Token 질문 있습니다.

로그인 CSRF Token 질문 있습니다.

QA

로그인 CSRF Token 질문 있습니다.

본문

로그인은 ajax 로 처리를 하고 있습니다.

get_token() 함수에서 토큰 만들고 세션처리하고 있고요

 

<form>

<input type="hidden" name="_csrf" value="<?php echo get_token(); ?>">

<input type="text" name="id" value="">

<input type="password" name="pw" value="">

<button tpe="button" id="bt">로그인</button>

</form>

<script>

$('#bt').on('click', function() {

  $.ajax({

    // ...생략

    url: 'login_ok.php',

    success: function(data) {

      // 로그인 실패시 _csrf 갱신 ( data._csrf )

      if (data.result != 'success') {

        $('[name="_csrf"]').val(data._csrf);

      }

    }

  });

});

</script>

 

login_ok.php에서

로그인에 실패하면 _csrf 토큰을 다시 만들고 data._csrf 로 돌려주는데요.

이거... 미친짓인가요???

 

이 질문에 댓글 쓰기 :

답변 4

login_ok.php 파일에서 로그인을 처리하는 동시에, 로그인 결과와 함께 새로운 _csrf 토큰을 함께 반환되어야 하는 걸로 알고 있습니다.

아래 코드를 참고하셔서 원하시는 로직으로 구현 해 보시는 건 어떨까 합니다.

 


<?php
// login_ok.php 파일
// 로그인 처리 등의 작업 수행
$result = // ... 로그인 처리 결과를 얻는 로직
// 새로운 _csrf 토큰 생성
$newCsrfToken = get_token();
// 로그인 결과와 함께 새로운 _csrf 토큰을 JSON 형식으로 반환
echo json_encode(array('result' => $result, '_csrf' => $newCsrfToken));
?>

 

클라이언트 측의 JavaScript에서도 JSON 형식으로 응답 데이터를 처리하도록 합니다.


// 클라이언트 측의 JavaScript
$('#bt').on('click', function() {
  $.ajax({
    // ...생략
    url: 'login_ok.php',
    success: function(data) {
      // 서버 응답 데이터를 JSON 형식으로 파싱
      var response = JSON.parse(data);
      // 로그인 실패 시 _csrf 갱신
      if (response.result !== 'success') {
        $('[name="_csrf"]').val(response._csrf);
      }
    }
  });
});

 

이렇게 하면 로그인 처리를 한 번의 요청으로 처리하고, 그 결과와 함께 새로운 _csrf 토큰을 JSON 형식으로 클라이언트에게 전달하게 되고, 불필요한 두 번째 요청을 줄일 수 있지 않을까 생각됩니다.

물론 csrf는 매번 요청할때마다 업데이트 되는게 디폴트 입니다.

그러나 상황에 따라 꼭 그렇게 작동해야 하는건 아닙니다.

답변에 감사드립니다!

 

제 질문은...

응답값으로 계속해서 새로운 csrf 토큰을 발행해주면

응답된 새로운 토큰 이용하여 다시 요청을 할 경우 

csrf 토큰이 의미가 없지 않나 하는 것이었지요.

설명이 부족했네요...

 

 

답변을 작성하시기 전에 로그인 해주세요.
전체 129,113 | RSS
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1402호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT