CI 묻고 답하기

제목 csrf post 형식에 새로고침
카테고리 CI 2, 3
글쓴이 뫄뫄잉뿌 작성시각 2018/11/12 17:36:43
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 25809   RSS

$config['csrf_protection'] = TRUE;

$config['csrf_regenerate'] = TRUE;

 

config에서 이렇게 설정해주고

<form method="post">

<input type="hidden" id="<?=$this->security->get_csrf_token_name() ?>" name="<?=$this->security->get_csrf_token_name() ?>" value="<?=$this->security->get_csrf_hash() ?>" />

</form>

으로 설정한 폼에서 데이터를 넣고 날짜를 바꾸는 페이지를 구현하였습니다.

method 를 get 방식으로 할 때는 F5(새로고침)했을 때 문제 없는데,

post 형식으로 바꾸면 

The action you have requested is not allowed.

이렇게 에러가 납니다.

조회하는 페이지라 이 페이지를 $config['csrf_exclude_uris'] = array(); 이 값에 넣어서 예외처리를 해주면 되지만,

그러면 생성하는 페이지 (값을 받아서 DB에 넣는 처리를 하는 페이지)에서는 보안상 csrf를 처리하는 게 맞는 것 같은데

이런 생성하는 페이지들에서는 새로고침을 하게되면 에러가 나서 혼동이 옵니다..

제 개인적으로도 새로고침을 자주하는 편이라 생성하는 페이지에서 값을 처음부터 다시 입력하게 될 경우 새로고침을 누르거나,

앞으로 이동, 뒤로 이동 같은 경우에는 무조건 에러 페이지가 나온다는 건데

제가 csrf 적용하는걸 잘못이해하고 있는건지.. csrf를 제대로 적용하려면 어떻게 해야하나요..? 

 다음글 초보 CI 질문드립니다. (2)
 이전글 ci 영어 도큐먼트 저작권있는건가요? (2)

댓글

변종원(웅파) / 2018/11/12 17:46:20 / 추천 0

$config['csrf_regenerate'] =  false; 로 해보세요

그리고 csrf는 post에서 악의적 전송을 막기위한 방법입니다. get방식에선 작동하지 않습니다.

뫄뫄잉뿌 / 2018/11/12 17:51:20 / 추천 0

@변종원(웅파)님

답변 감사합니다!

false로 해서 시도해보니 잘 작동하네요!

의문점은 매뉴얼에 보면 csrf_regenerate 설명 부분에

토큰 재생성을 기본으로 할 시 더 강력한 보안을 유지합니다. 그러나 유효하지 못한 토근값이 되버릴수 있습니다(뒤로가기, 앞으로이동, 여러 탭/윈도우 사용, 비동기화 작업, 등).. 다음 구성 매개변수를 변경하여 동작을 변경할 수 있습니다.

이렇게 적혀있는데 csrf_regenerate를 false로 하면 보안은 약해지지만 csrf에 대한 기본적인 보안은 가능하게 해준다는 의미인건가요?

늘 도움주셔서 정말 감사합니다.