CI 묻고 답하기

제목 CSRF 사용시 AJAX 사용 이게 맞나요?
글쓴이 작성시각 2013/06/13 19:47:40
댓글 : 2 추천 : 0 스크랩 : 2 조회수 : 21759   RSS
요즘 보안 문제로 다시 소스를 수정하였는데요.

config.php 에서 XSS랑 CSRF를 TRUE로 설정했더니 AJAX가 안되더라구요.

$config['global_xss_filtering'] = TRUE;
$config['csrf_protection'] = TRUE;

그래서 이곳저곳 찾아서 수정하긴 했는데 맞는지 좀 봐주세요.

config.php

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'ci_t';

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

JS단
user_id : $("#asdasd").val(),
ci_t : $("#ci_t").val(),


대충 이렇게 하니까 되긴 하던데요.

보통 이렇게 하는게 정상적인가요? 제가 워낙 근본 없이 C & P 해서 개념이 잘안서네요.

고수님들 도와주세요.
 
 다음글 config의 database설정을 불러오는 부분을 보... (5)
 이전글 Disallowed Key Characters. 에러 ... (2)

댓글

/ 2013/06/13 20:46:30 / 추천 0
 네 그렇게 하시면 되요

다만 개념이 조금 정리가 안된다고 하시는데

정리를 좀 해드리자면 csrf 옵션사용시

form 전송시 csrf 값을 같이 반드시 같이 전송해줘야 합니다.

같이 전송되어져야 하는 변수 명은 $config['csrf_token_name']에 지정해주신 값으로 하셔야 하며

전송되어져야 하는 값은 $this->security->get_csrf_hash() 으로 불러오시는게 맞습니다.



js에 지정해주신 것을 보면

user_id 의 경우 본인이 필요한 값이 되는 것이고

ci_t의 경우 csrf에서 거부당하지 않기 위해 같이 전송해줘야 되는 변수명(지정한 것)이며

$("#ci_t").val(),의 경우  불러온 $this->security->get_csrf_hash()  의 값이 되는 것입니다.
/ 2013/06/13 21:21:50 / 추천 0
감사합니다 ^^