보안 클래스
보안클래스는 입력 값을 안전히 처리하여, 보다 안전한 프로그램을 만드는데 도움이 되는 메서드들을 제공합니다.
XSS 필터링
CodeIgniter에서는 크로스 사이트 스크립팅 공격을 방지하기 위해 모든 POST 와 COOKIE 데이터를 자동으로 필터링 할 수도 있고, 개별 아이템별로 필터링 할 수도 있습니다. 전역적으로 동작하지 않는것이 기본값입니다.왜냐하면, 처리시 약간의 오버헤드가 존재하기도 하고, 개발자에게 선택권을 주기 위해서 입니다.
XSS 필터는 자바스크립트실행을 시도한다거나, 쿠키를 하이재킹한다거나, 다른 해괴망측한 짓거리들을 한다거나 하는것을 막는 기술입니다.만약 금지된 문자나 코드(위 짓거리들을 하려는)등을 찾으면 데이터를 안전한 HTML 엔터티로 변환하여 표시합니다.
안내: 이기능은 입력데이터 처리용으로만 사용하세요 . 처리시 오버헤드가 심해질수 있으므로(시스템 리소스 많이먹음) 다른 처리에서는 사용하지 않는것이 좋습니다.
XSS필터를 이용하여 필터하려면 아래 함수를 사용하세요:
$this->security->xss_clean()
사용예:
$data = $this->security->xss_clean($data);
항상 자동으로 POST 및 COOKIE 데이터를 필터링하려면 application/config/config.php 를 열고 다음과 같이 설정하십시오.
config['global_xss_filtering'] = TRUE;
안내: form validation 클래스에도 XSS 필터링 기능을 사용할 수 있는 옵션이 있습니다.
옵션으로 제공되는 두번째 파라미터 is_image는 이미지를 검사하여 잠재적 XSS 공격을 방지합니다. 파일업로드시 유용합니다. 두번째 파라미터가 TRUE이면 처리된 문자열을 반환하는 대신 이미지가 안전한 경우 TRUE를, 악의적인 정보가 포함된 경우 FALSE를 반환합니다.
if ($this->security->xss_clean($file, TRUE) === FALSE)
{
// file failed the XSS test
}
$this->security->sanitize_filename()
사용자 입력에서 파일이름을 입력받을 경우 디렉토리 탐색이나 다른 보안문제를 해결하기 위해서 소독과정을 거치는것이 좋습니다.(손소독 아님 ㅎㅎ). sanitize_filename() 메서드를 이용하여 파일이름을 소독하세요. 예:
$filename = $this->security->sanitize_filename($this->input->post('filename'));
파일이름에 상대경로가 포함되는걸 허용할 경우 (예:file/in/some/approved/folder.txt) 두번째 파라미터$relative_path 를TRUE로 설정하세요.
$filename = $this->security->sanitize_filename($this->input->post('filename'),
TRUE);
크로스 사이트 요청 위조 Cross-site request forgery (CSRF)
CSRF 보호를 활성화하려면 application/config/config.php 를 열고 다음과 같이 설정합니다:
$config['csrf_protection'] = TRUE;
폼헬퍼(form helper)의 form_open() 함수를 사용하면 폼의 CSRF 보호를위한 hidden 필드가 자동으로 삽입됩니다.