inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

PHP 7+ 프로그래밍

input 값을 넣으면 CSRF_TOKEN 값이 달라지는 이유가 뭔가요?

453

Myeong Seong Jeong

작성한 질문수 5

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

요렇게 해주는 역할을 하는건가요?

php

답변 3

0

정상우

1. 위에서 말씀드렸다시피 폼의 필드는 프론트엔드 상에서 표시되시므로 개발자도구를 사용하면 위조가 가능하다고 하였습니다. 악의적인 목적으로 토큰을 위조했고, 이 상태로 전송한다면 실패할 것입니다.

아래의 경우는 어떠한 것을 말하는 것인지 모르겠습니다. 세션에 담긴 토큰 값이 어떠한 이유에 의해 변화하거나 토큰 값이 위조(사용자에 의해, 또는 개발자에 의해)되지 않는 한 토큰이 서로 다를 수 없습니다.

2. 이 사항은 문서를 보는게 더 빠르겠습니다.
https://www.php.net/manual/en/function.filter-input.php#115086

0

Myeong Seong Jeong

답변감사합니다. 아직 이해가 가질 않습니다.
> register.php
$_SESSION["CSRF_TOKEN"] = bin2hex(random_bytes(32));
output_add_rewrite_var("token"$_SESSION["CSRF_TOKEN"]);
> register_process.php
$token = filter_input(INPUT_POST, "token");
hash_equals($token$_SESSION["CSRF_TOKEN"]) 여기서 return값이 false가 나올수가 있나요?
나온다면 어떠한 경우에 나오나요?
그리고
register.php 에서 회원정보를 입력한 후 register_process.php에서 로그를 찍어보면 토큰값이 서로 다르고
회원정보를 입력하지 않고 register_process.php에서 로그를 찍어보면 토큰값이 서로 같다고 나오는데
이유가 뭔지 아무리 찾아봐도 답을 모르겠습니다.
마지막으로
$userId = filter_input(INPUT_POST, "userID");
$userId = $_POST["userid"];
두개 다른점이 먼가요? 스택오버플로우를 찾아봐도 명확한 답이 안나오네요.
두서없이 질문해서 죄송해요

0

정상우

CSRF 의 과정을 말씀하시는 것인가 봅니다. 스탭을 생각해보도록 할게요.

1. token 이라는 키를 가진 세션에 랜덤으로 생성한 32바이트 값을 넣습니다. (토큰 값은 검증이외에는 사용하지 않으므로)

2. output_add_rewirte_var() 함수는 폼에 필드를 추가해주죠. 폼 필드의 namecsrf_token 이며 값은 이미 생성한 값 $_SESSION['token'] 을 넣습니다. 새로고침 할 때마다 토큰을 재생성하므로 토큰 값이 바뀜.

3. 처리 프로세스에서는 폼에 넣은 토큰으로 넘어온 값(폼 필드는 위조가 가능하므로)과 $_SESSION['token'] 값을 비교하여 검증합니다.

질문의 대답이 되었으리라 생각해봅니다.

53강 레이아웃에서 css git 링크 관련 질문입니다.

0

35

2

[섹션 5]레포지토리 소스파일 오류 위치, 수정 제안

0

180

1

add configuratio.. 자체에

0

268

2

터미널에 글이 안써집니다.

0

635

1

일반적으로 쓰이지 않는 폰트 부분

0

465

1

readmore 클릭시 쿼리내용 받아오는게 이해가 안되요

0

497

1

$_GET과 $_POST를 구별하여야한다고 하는데 이건 왜 $_GET입니까 콜백이라서 그런가요? 왜콜백은 그래도 되나요?

0

475

1

xdebug 설치가 안됩니다.

0

401

1

xdebug 설치 확인 페이지가 안열립니다

0

360

1

if ~ elseif ~ else 문법 표준적인 코딩 방법에 대한 질문입니다.

1

523

1

mysqli_stmt_close($stmt) 관련 질문드립니다.

0

319

1

DB_CONNECTION 부분 질문

0

267

1

FILTER_VALIDATE FILTER_SANITIZE 차이를 모르겠습니다.

0

296

1

결과 ...

0

244

1

random_bytes

0

319

1

preg_replace_callback 질문드립니다.

0

435

1

호스팅에 php 코드 업로드하면 hash 로직이 보이진 않을까요?

0

266

1

버퍼링 궁금한 점이 있습니다.

0

287

1

restore_include_path 오류

0

316

1

php 에러발생..

0

3759

3

터미널로 php 실행시 document root 지정

0

244

1

posts가 null이라고 나옵니다.

0

209

2

rand() vs random_int() 차이점?

0

518

1

php 8 로 하시는 분들을 위한 ini 팁

1

513

1