작성
·
354
0
몇가지 궁금한 점 이 있습니다.
1. 회원가입 폼에서 input에 값을 넣고 submit을 하면
$token 값과 $_SESSION["CSRF_TOKEN"]값이 달라지는 이유가 뭔가요?
참고로 input에 값을 넣지 않으면 $token 과 $_SESSION["CSRF_TOKEN"]값이 같아집니다.
2. $_SESSION["CSRF_TOKEN"] 에 랜던한 32비트 값을 2진수에서 16진수로 바꿔준 값이 저장하고
그리고 $_SESSION["CSRF_TOKEN"]값을 "token"이라는 이름에 저장하는건가요?
3. output_add_rewrite_var()라는 함수는
www.aaaaa.com/aaaa.php?token=8cb6c897035b3a0e98f221f6a34d41f50a0d322172965c001d4d0526d88b9344
요렇게 해주는 역할을 하는건가요?
답변 3
0
1. 위에서 말씀드렸다시피 폼의 필드는 프론트엔드 상에서 표시되시므로 개발자도구를 사용하면 위조가 가능하다고 하였습니다. 악의적인 목적으로 토큰을 위조했고, 이 상태로 전송한다면 실패할 것입니다.
아래의 경우는 어떠한 것을 말하는 것인지 모르겠습니다. 세션에 담긴 토큰 값이 어떠한 이유에 의해 변화하거나 토큰 값이 위조(사용자에 의해, 또는 개발자에 의해)되지 않는 한 토큰이 서로 다를 수 없습니다.
2. 이 사항은 문서를 보는게 더 빠르겠습니다.
https://www.php.net/manual/en/function.filter-input.php#115086
0
0
CSRF 의 과정을 말씀하시는 것인가 봅니다. 스탭을 생각해보도록 할게요.
1. token 이라는 키를 가진 세션에 랜덤으로 생성한 32바이트 값을 넣습니다. (토큰 값은 검증이외에는 사용하지 않으므로)
2. output_add_rewirte_var() 함수는 폼에 필드를 추가해주죠. 폼 필드의 name 은 csrf_token 이며 값은 이미 생성한 값 $_SESSION['token'] 을 넣습니다. 새로고침 할 때마다 토큰을 재생성하므로 토큰 값이 바뀜.
3. 처리 프로세스에서는 폼에 넣은 토큰으로 넘어온 값(폼 필드는 위조가 가능하므로)과 $_SESSION['token'] 값을 비교하여 검증합니다.
질문의 대답이 되었으리라 생각해봅니다.