제목 | CI3에서 CSRF 와 AJAX 사용시 팁.. | ||
---|---|---|---|
글쓴이 | 아주머니 | 작성시각 | 2019/02/18 21:50:08 |
|
|||
안녕하세요 처음으로 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
|
변종원(웅파)
/
2019/02/19 10:25:36 /
추천
0
깔끔한 정리 감사합니다. ^^
|
좋은 팁 감사합니다.
ajax 사용시 유용하게 사용하겠습니다.