TIP게시판

제목 CI3에서 CSRF 와 AJAX 사용시 팁..
글쓴이 아주머니 작성시각 2019/02/18 21:50:08
댓글 : 2 추천 : 0 스크랩 : 0 조회수 : 11666   RSS

안녕하세요

처음으로 git을 써보려는데 뭐라도 의미있게 올려보면서 해보려고하니, 여기서 도움받던게 생각나서

나름대로.. 팁이라도 남기면서 git쓰는 연습겸 겸사겸사 올립니다.

 

팁 내용은 csrf 활성화 + csrf_regenerate 도 활성화 일 때, ajax 통신 시 (post or post_multipart)

요청할 때 자동으로 포함해서 보내는 내용입니다. 특별히 팁이 없는걸로 봐서는 알아서 당연하게 

쓰시는것들도 같은데, 또 질문 답변게시판을 보면 간간히 같은내용이 올라오더라구요. 

 

폼 헬퍼를 사용하면 자동 포함이고.. ajax 사용시에 csrf_token: '<?= $this->security->get_csrf_hash(); ?>">'

이런식으로 그때 그때 넣어줘도 좋지만, 토큰 재생성 옵션을 활성화 시키면 한 페이지에서 반복요청이 번거로우니까요..

 

application/config/config.php 에서 아래 일 때,

$config['csrf_protection'] = TRUE;
$config['csrf_token_name'] = 'csrf_token';
$config['csrf_cookie_name'] = 'csrf_cookie';
$config['csrf_expire'] = 7200;
$config['csrf_regenerate'] = TRUE;
$config['csrf_exclude_uris'] = array();

 

그리고 아래 내용이 ajax 요청 전에 입력되어있으면..

function getCookie(cname) {
    var name = cname + '='
    var decodedCookie = decodeURIComponent(document.cookie)
    var ca = decodedCookie.split(';')
    for(var i = 0; i <ca.length; i++) {
        var c = ca[i]
        while (c.charAt(0) == ' ') {
            c = c.substring(1)
        }
        if (c.indexOf(name) == 0) {
            return c.substring(name.length, c.length)
        }
    }
    return ''
}

$.ajaxPrefilter(function (options, originalOptions, jqXHR) {
    if (!options.processData && !options.contentType) {
        options.data.append('csrf_token', getCookie('csrf_cookie'))
    } else if (options.type.toLowerCase() === 'post') {
        options.data = $.param($.extend({}, originalOptions.data, {
            csrf_token: getCookie('csrf_cookie')
        }))
    }
})

 

위 2개면 알아서 요청할 때 보내도록 되어있어요. 샘플 페이지는 아래 깃헙에 올려놓았어요.

https://github.com/chrome853/codeigniter3-csrf

 

읽어주셔서 감사합니다 ( _  _ )

 다음글 CI3 에서 Doctrine ORM(Object-rel... (6)
 이전글 테스트 결과를 보다 깔끔하게 보는 방법 (1)

댓글

한대승(불의회상) / 2019/02/19 09:27:03 / 추천 0

좋은 팁 감사합니다.

ajax 사용시 유용하게 사용하겠습니다.

변종원(웅파) / 2019/02/19 10:25:36 / 추천 0
깔끔한 정리 감사합니다. ^^