CI 코드

제목 [보안] CSRF(XSRF) 공격방지 라이브러리
글쓴이 ci세상 작성시각 2009/10/23 00:23:47
댓글 : 3 추천 : 0 스크랩 : 0 조회수 : 94416   RSS

<목     적>
codeigniter의 post, session, 엑티브레코드, 파일업로드 지정 및 다양한 보안의 우수성을 입증해 보이고 있습니다.
그래도 만약이라는 부분이 있기 때문에 아래 부분을 올려봅니다. 보안강화해서 나쁠것은 없기 때문입니다.^^

<CSRF 보안 취약 유형>
CSRF 공격유형을 정리하면 아래와 같이 나눌 수 있습니다.

1. 공격자는 피해자가 로그인한 사이트의 취약점을 잘 알고 있어야 합니다.
2. 사이트가 자동 로그인을 허용하고 있거나, 피해자가 현재 로그인한 상태여야 합니다.
3.사이트에서 특정 동작을 수행할 때 사용자 세션 외에 다른 확인 절차를 밟지 않습니다. 

참조 : http://blog.naver.com/yichi718/110046711041
 
특히 3번의 과정을 ~~ 처리해 주는 핵심이 폼 전송시 암호화된 hidden 값을 넘겨서 컨트롤러에서 폼검증을 시켜주는 부분인데요 이러한 개념이 포함된 라이브러리 입니다.

<CSRF 방지 라이브러리 설치/사용 방법>
 
1. 첨부된 csrf-v4.zip소스를 다운로드
=> 파일설명
Csrf.php - codeigniter 추가 라이브러리
MY_Form_validation.php - codeigniter 라이브러리 확장
csrf_helper.php - codeigniter 헬퍼
example/csrf_test.php - 예제 view
example/csrf_form.php - 예제 폼
 

2. 다음 파일을 각각의 폴더로 복사
- Csrf.php 와 MY_Form_validation.php 는 application/libraries/  폴더로 복사
- csrf_helper.php 는 application/helpers/ 폴더로 복사
 

3. 주소창에서 http://127.0.0.1/index.php/csrf_test 로 확인
 

4. 소스보기 확인 ~~
 <HTML>
<HEAD></HEAD>
<BODY>
<p></p>
<div>
    <form action="http://127.0.0.1/index.php/csrf_test" method="post">        
 <input type="hidden" name="formid" value="205324ae076a748bb6" id="formid"  /> 
 <input type="hidden" name="token" value="70097602327ff5f67679db56b12e7153" id="token"  />
        <br />
        <label for="foo">Foo</label>        <br />
        <input type="text" name="foo" value=""  />        <br />
        <input type="submit" name="submit" value="Send"  />    </form></div>
</BODY>
</HTML>
=> 위에 formid, token이 공격유형 3번을 막아주기 위하여 hidden으로 자동으로 생성
 
★ 이것이 없다면 codeigniter 컨트롤러가 정상적으로 처리불가합니다.

         // Run validation
        if ($this->form_validation->run()) {
            $data['message'] = 'Valid';
        }
        else {
            $data['message'] = validation_errors();
        }
위에 표기된 폼검증은 hidden 값을 체크할 수 있도록 ~~ 라이브러리가 확장되어 있습니다.
 
위와같은 단순한 과정을 간단히 처리할 수 있는 CSRF 라이브러리이기 때문에 유용하게 사용이 가능할 것입니다.


======= codeigniter의 보안은 그 어떠한 프레임워크보다도 안전성을 보여주고 있습니다. ===========

개발자와 서버관리자가 무심코 ~~ 계정압축을 해서 서버에 올려두지만 않는다면 안전합니다.^^


참조 : http://kylehasegawa.com/codeigniter-csrf-xsrf-library
첨부파일 csrf-v4.zip (7.9 KB)
 다음글 포럼의 소스 오픈합니다. (38)
 이전글 [예제] 학습용 쇼핑몰

댓글

변종원(웅파) / 2009/10/23 15:56:25 / 추천 0
좋은 팁 감사. ^^
양승현 / 2010/03/12 13:53:36 / 추천 0
음.. 이거 유심히 봐야할거군요.
변종원(웅파) / 2010/03/12 15:20:11 / 추천 0
이번에 y사 프로젝트 진행하면서 보니까 xss나 request에 대한 처리는 ci에서 기본으로 하고 있는데
폼전송시 히든값으로 처리하는 부분은 없었습니다. 그래서 나중에 만들어놓으려고 했는데..
y사에서는 crumb이라고 표현하더군요. 폼전송시 키값을 생성해서 넘기고 받은 페이지에서
체크. 변조자체를 막는거죠.