TIP게시판

제목 특정경로에서 csrf 끄기..
글쓴이 작성시각 2016/04/20 17:56:01
댓글 : 5 추천 : 0 스크랩 : 0 조회수 : 14406   RSS

api를 만들고 있는데, 도메인/api/요렇게 들어왔을때는 rest server 컨트롤러를 사용해서 rest 서버를 운용하게 되었습니다.

근대 post(되었던가 해깔림...), get등은 되는데 delete는 원하는 데로 작동을 안해서 찾아보던중에 csrf 기능에 막혀서 요청을 제대로

처리하지 못하고있었습니다. 그래서 특정폴더에서 csrf를 끄도록 하는 방법에 대해서 검색을 했었는데, 대략적인 방법은 나왔는데,

이렇게 해라 저렇게 해라 하는 지침이 아니라서 제가 정리하면 좋겠다고 생각하게 되서 이 글을 적게 되었습니다.

자! 그럼 시작합니다.

application/config/hook.php 파일을 열어주시고.

$hook['pre_system'] = array(
	'class'    => 'Api_common',
	'function' => 'index',
	'filename' => 'Common.php',
	'filepath' => 'hooks'
);

이런식으로 추가해줍니다.

그리고 application/hooks/Common.php 파일을 만드시고 추가해줍니다.

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Api_common {
    function index () {
        if (isset($_SERVER['REQUEST_URI'])) {
            $req_uri = explode('/',$_SERVER['REQUEST_URI']);
            if ($req_uri[1] == API_URI) {
                get_config(array('csrf_protection' => false));
            }
        }
    }
}

 

위에 보시면 API_URI라고 있죠? 저부분은 상수로 지정되어있습니다. application/config/constants.php를 열어주시고

define('API_URI', 'blah');

추가해줍니다.

끝났습니다. 즐프요~!

 다음글 sql select 쪼~~~금 더 빠르게 만드는 팁 (4)
 이전글 스마일서브 가상서버 신청시 참고사항 (1)

댓글

변종원(웅파) / 2016/04/20 18:12:03 / 추천 0
좋은 정보 감사합니다. ^^
tigerbi / 2016/04/20 21:29:21 / 추천 0

혹시... 이 방법으로 대체되는건 아닌가요??

 

 

말씀하시는 기능이 이것 같아서요^^;

/ 2016/04/20 23:19:50 / 추천 0

@tigerbi 이거 확인해보니 맞네요.

이런기능도 있었네요. 3버전 갈아타고, 3버전 매뉴얼은 안보는지라 있는지도 몰랐는데,

저처럼 첫번째 세그먼트는 전부 꺼야할 경우엔 어떻게 정규식을 짜야하죠??

tigerbi / 2016/04/21 13:05:52 / 추천 0

@닉

제가 정규식이 취약해서....

하위디렉토리가 어떻게 처리되는지는 모르겠는데..

일단 아래와 같은 식이 아닐까요??

테스트는 안해봐서 몰라요 ㅎㅎ;;

$config['csrf_exclude_uris'] = array( API_URI.'/[a-zA-Z0-9]+', API_URI.'/[a-zA-Z0-9]+/[a-zA-Z0-9]+');

/ 2016/04/21 13:10:26 / 추천 0

@tigerbi 아! 그렇군요.. 위 경우는 세그먼트 3자리까지 적용되는 코드인거 같은데

한방에 파파박 하위 세그먼트를 포함하는 정규표현식이 필요합니다. ㅎ

나머지는 아래 고수분이 ... ㅎㅎ