check_write_token함수의 $_REQUEST['token']에 관하여 질문하고자 합니다.

check_write_token함수의 $_REQUEST['token']에 관하여 질문하고자 합니다.

QA

check_write_token함수의 $_REQUEST['token']에 관하여 질문하고자 합니다.

답변 2

본문


// POST로 넘어온 토큰과 세션에 저장된 토큰 비교
function check_write_token($bo_table)
{
    if(!$bo_table)
        alert('13올바른 방법으로 이용해 주십시오.', G5_URL);
 
    $token = get_session('ss_write_'.$bo_table.'_token');
    set_session('ss_write_'.$bo_table.'_token', '');
 
    if(!$token || !$_REQUEST['token'] || $token != $_REQUEST['token'])
        alert('14올바른 방법으로 이용해 주십시오.', G5_URL);
 
    return true;
}

 

안녕하세요

위의 코드에서

 

(1)$_REQUEST['token']의

token이 무엇인지요?

 

(2)변수가 들어가있는게 아니라

왜 $_REQUEST['token'] 이 형태 인지요?

 

초심자입니다.

쉽게 설명좀 부탁드립니다.

좋은 하루 되세요.

이 질문에 댓글 쓰기 :

답변 2

PHP 에서는 슈퍼 글로벌 변수라고하여

$_SERVER, $_POST, $_GET, $_FILES, $_REQUEST 등 여러가지 슈퍼 글로벌 변수가 있습니다.

 

(1)

$_REQUEST 란 $_POST, $_GET을 모두 포함한 슈퍼 글로벌 변수입니다.

예를들어 해당 실행하는 코드의 앞 페이지에서 $_POST로 보내든, $_GET으로 보내든

모두 $_REQUEST 슈퍼글로벌 변수에 해당 값들이 저장됩니다.

이때 checke_write_token() 함수가 실행되기전 $_POST 또는 $_GET 으로 toten 값을 전달 했다는 의미입니다.

따라서 $_REQUEST['token'] 으로 값을 받은 것 입니다.

 

추가 예로 앞에서 <form>의 GET방식으로


<form method="get">
<input name="test" value="테스트">
</form>

형식으로 값을 넘긴다면 뒤에서는 일반적으로 $_GET['test'] 형식으로 받을수 있지만

$_REQUEST['test'] 로도 받을 수 있습니다.

 

(2) $_REQUEST['token'] 은 배열이며 보통 배열 변수라고도 부릅니다.

$변수명 = 일반 변수

$배열명['키값'] = 배열 변수

 

웹 취약점중인 하나인 세션하이젝킹을 방어를 하려고
토큰의 개념을 사용하고 있습니다.

세션 하이젝킹(Session Hijacking)이란
공격자인 해커가 사이트 이용자의 세션값을 가로채어  그 시스템을 접근하려는 공격입니다.


웹 서버(PHP 로직 부분)에서 토큰을 요청 웹 브라우저에 할당을 합니다. ( 그누보드 $_REQUEST['token'] => 브라우저 사용자 식별용 )
어떠한 특정행위 (게시글 글쓰기.. 웹에서 일어나는 기타 행위들..)를 웹서버로 요청을 할때
브라우저에서 할당 받은 토큰과 웹서버에 있는 토큰과 비교를 합니다. ( $_REQUEST['token']와 세션 토튼 비교)
정말 이 토큰이 요청한 사용자인지 검증하는 단계인거죠..

이게 도입이 되기전까지는 공격자가 게시글을 사용할때 img태크, iframe태그등으로 자신의 레벨을 올리는 링크를 올려서 그 올린글을 웹사이트 관리자가 보았을때 시스템 계정을 탈취를 했습니다.

이러한 행위를 방지하는 차원으로 이해해주시면 되겠습니다.
 

답변을 작성하시기 전에 로그인 해주세요.
QA 내용 검색
질문등록
전체 44
© SIRSOFT
현재 페이지 제일 처음으로