Input Filtering
Security Filtering(보안을 위한 필터링)
새 controller 로드 시, Security Filtering 메소드가 자동으로 호출됩니다.
해당 작업은 다음과 같습니다 :
- $config['allow_get_array']가 FALSE(기본값은 TRUE)이면, 전역 GET 배열 변수를
할당해제합니다.
- register_globals 값이 on 이면, 모든 전역 변수를 할당 해제합니다.
- GET/POST/COOKIE 배열 변수 키값을 필터링(여과작업)합니다.
오직 알파벳과 숫자만(이외 일부 문자 포함) 허용합니다.
- XSS 필터링(Cross Site 스크립팅 해킹 기법) 기능을 제공합니다.
이 기능은 전역에서 사용가능하며 또한, 특정 요청(request) 시 실행되도록
할 수 있습니다.
- 줄바꿈 문자를 "PHP_EOL"로 표준화합니다.
(유닉스 기반 운영체제 : \n, 윈도우 운영체제 : \r\n).
이 기능은 환경설정에서 조정할 수 있습니다.
XSS Filtering
Input Class는 cross-site 스크립팅 해킹을 막을 수 있는, 자동화된 필터링 기능을
가지고 있습니다.
이 기능이 항시 자동으로 작동되길 원한다면, 해당 프로세스가 POST 및 COOKIE(쿠기)
데이터에 접근할 수 있어야 합니다.
그렇게 하기 위해, "application/config/config.php" 파일을 열어 다음처럼
설정할 수 있습니다 :
$config['global_xss_filtering'] = TRUE;
"XSS Filtering"을 사용하길 원한다면, "Security Class"를 참조하십시오.
중요내용
'global_xss_filtering' 설정은 향후 사라질 예정입니다.
다만, 하위 호환성을 보장하기 위해 제공됩니다.
XSS escaping 작업은 input(입력) 작업이 아니라, output(출력) 작업시에 사용됩니다.
폼 데이터 엑세스 작업
POST, GET, COOKIE 또는 SERVER 데이터 사용
CodeIgniter는 POST, GET, COOKIE 또는 SERVER 항목을 다루기 위해 헬퍼 메소드를 사용합니다.
해당 아이템을 직접 다루기($_POST['something'])보다 제공되는 메소드를 사용함으로
얻는 가장 큰 이점은, 해당 아이템을 체크하여 비어있을 경우, NULL을 반환시킨다는 점입니다.
이렇게 할 경우, 해당 아이템이 존재하는지 테스트할 필요가 없다는 점에서 더 편합니다.
보통 당신은 다음처럼 코딩할 것입니다 :
$something = isset($_POST['something']) ? $_POST['something'] : NULL;
CodeIgniter로 작업할 시 간단히 다음처럼 할 수 있습니다 :
$something = $this->input->post('something');
주 메소드는 다음과 같습니다 :
$this->input->post()
$this->input->get()
$this->input->cookie()
$this->input->server()
Using the php://input stream
PUT, DELETE, PATCH 및 다른 request 메소드를 사용하길 원할 경우,
특별한 input stream (입력 스트림)을 통해서만 해당 메소드를 사용할 수 있으며,
일회성으로만 읽어들일 수 있습니다.
이것은 단순히 $_POST 배열 변수를 읽어들이는 것처럼, 간단한 문제가 아닙니다.
왜냐하면 $_POST 배열 변수를 읽어들일 때는 언제든 시도할 수 있지만,
PUT, DELETE, PATCH 및 다른 request 메소드 사용은 그렇지 않기 때문입니다.
이와 관련하여, CodeIgniter는 당신에게 편의성을 제공합니다.
"php://input stream"로부터 언제든 데이터를 읽을 수 있습니다.
단지 $raw_input_stream 속성을 사용함으로 그렇게 할 수 있습니다. :
$this->input->raw_input_stream;
게다가, "input stream"이 "$_POST"와 같이 "form-encoded(폼 인코딩)" 형태로
인코딩되었다면, input_stream() 메소드를 호출하여 해당 값에 엑세스할 수 있습니다 :
$this->input->input_stream('key');
"get()" 및 "post()"와 같은 다른 메소드도 이와 유사합니다.
요청된 데이터가 존재하지 않을 경우, NULL을 반환합니다.
또한, 해당 메소드의 두번째 인자에 boolean 값을 넣어, "xss_clean()"을 통해
해당 데이터를 실행할지 여부를 결정할 수 있습니다. :
$this->input->input_stream('key', TRUE); // XSS Clean
$this->input->input_stream('key', FALSE); // No XSS filter
주의사항
PUT, DELETE 또는 PATCH 중 어떤 형태로 데이터를 읽었는지 알기 위해, "method()"을 활용할 수 있습니다.
Input Class는 두가지 목적을 가집니다.
1. 보안을 위해, Input 전역 데이터의 사전 처리 작업을 진행합니다.
2. 사전 처리 작업과 input 데이터 검출 작업을 위해 헬퍼 메소드를 제공합니다.
주의사항
이 클래스는 시스템에 의해 자동으로 초기화되므로, 수동으로 초기화할 필요가 없습니다.