입력클래스 Input Class
입력클래스는 두가지 목적으로 사용됩니다:
- 보안을 위해서 전역(global) 입력 데이터를 전처리 합니다.
- 입력클래스는 입력데이터를 가져오거나, 가져온 데이터를 전처리하는 헬퍼함수를 제공합니다.
참고: 이 클래스는 시스템에 의해 자동으로 초기화 되므로 여러분이 초기화 하실 필요가 없습니다.
보안 필터링 Security Filtering
새 컨트롤러가 호출되면 보안필터링 함수는 자동으로 호출됩니다. 필터링은 다음 작업을 수행합니다:
- 전역(global) GET 배열을 삭제합니다.CodeIgniter 는 GET 문자열을 사용하지 않기때문에, 남겨둘 필요가 없습니다.
- 만약 register_globals 가 on 되어 있는 경우라면 모든 전역(global)변수들을 삭제합니다.
- POST/COOKIE 배열의 키들을 필터링하여 영문자나 숫자만(그리고 다른것도 약간) 허용합니다.
- XSS (Cross-site Scripting Hacks) 필터링을 제공합니다. 이는 전역적으로 활성화 될수도 있고, 요청에 따라 활성화 될수도 있습니다.
- 줄바꿈 문자를 \n 로 표준화 합니다
XSS 필터링 XSS Filtering
CodeIgniter 는 XSS (Cross-site Scripting Hacks) 방지 필터를 제공합니다. 필터는 자동으로 모든 POST 와 COOKIE 데이터를 필터링하거나, 각 아이템별로 수동 필터링 할수 있습니다. 기본적으로 전역필터링을 수행하지는 않습니다.왜냐하면 만약 그럴경우 약간의 오버헤드가 필요하고, 또 여러분이 모든 클래스에서 필터링하는것을 원하지는 않을것이기 때문입니다.
XSS 필터는 자바스크립트 등으로 쿠키를 훔친다든지 할때 사용하는 일반적 테크닉이 사용될것이라고 예상합니다.만약 허용되지않는것이 발견될때 필터는 데이터를 문자요소로 안전하게 변환됩니다.
참고: 이함수는 전송(submission)된 데이터를 처리하는데만 써야합니다. 일반적인 런타임처리에는 이함수를 사용하지 않습니다. 왜냐하면 처리에 꽤 많은 오버헤드가 필요하기 때문입니다.
XSS 필터를 통해 데이터를 필터링하려면 아래 함수를 사용합니다:
$this->input->xss_clean()
사용예:
$data = $this->input->xss_clean($data);
POST 나 COOKIE 데이터에 대해 자동으로 필터링을 수행 하고자 한다면 application/config/config.php 파일을 열어서 아래를 세팅합니다:
$config['global_xss_filtering'] = TRUE;
참고: 만약 폼 검증(validation)클래스를 사용한다면 , 그 클래스에서도 XSS 필터링 옵션을 제공합니다.
선택적으로 사용할 수 있는 두번째 파라미터인 is_image 는 잠재적인 XSS 공격에 대비해 이미지를 테스트하는데 사용합니다.이는 파일 업로드 보안에 매우 유용합니다. 두번째 파라미터가 TRUE로 설정되어 있으면 문자를 변환하는대신, 이미지가 안전하면 TRUE 를 잠재적 위험이 있으면 FALSE 를 반환합니다.
if ($this->input->xss_clean($file, TRUE) === FALSE)
{
// file failed the XSS test
}
POST, COOKIE, 혹은 SERVER 데이터 사용하기
CodeIgniter는 POST, COOKIE 혹은 SERVER 아이템을 가져오기 위해서 3가지 헬퍼함수를 제공합니다. 각 아이템들을 직접가져오는것보다($_POST['something']) 헬퍼를 사용하면 더 좋은 이유는 ,헬퍼가 아이템이 세팅되어있는지를 먼저체크하고 세팅되어있지않다면 false 를 반환하기 때문입니다. 아이템이 존재하는지 먼저 검사하고 처리할 필요가 없어집니다. 다시말하면 , 일반적으로 여러분안 아래와 같이 프로그램할 것입니다.:
if ( ! isset($_POST['something']))
{
$something = FALSE;
}
else
{
$something = $_POST['something'];
}
CodeIgniter 에서는 아래와 같이 간단하게 위의 기능을 수행할 수 있는것이죠:
$something = $this->input->post('something');
세가지함수는 아래와 같습니다:
- $this->input->post()
- $this->input->cookie()
- $this->input->server()
$this->input->post()
첫번째 파라미터는 POST 아이템의 이름(name)이 들어갑니다:
$this->input->post('some_data');
찾고자하는 아이템이 존재하지않으면 함수는 FALSE 를 리턴합니다.
선택적으로 사용하는 두번째 파라미터는 데이터를 XSS 필터링 되게 합니다. 두번재 파라미터를 TRUE로 하시면 됩니다;
$this->input->post('some_data', TRUE);
$this->input->get()
이함수는 get 데이터를 가져온다는 점만 빼면 post 함수와 동일합니다:
$this->input->get('some_data', TRUE);
$this->input->get_post()
이함수는 post 와 get 을 모두 뒤져서 데이터를 가져옵니다 . post를 먼저찾고 그다음 get 을 찾습니다:
$this->input->get_post('some_data', TRUE);
$this->input->cookie()
이함수는 쿠키에서 데이터를 가져온다는점을 배면 post 함수와 동일합니다:
$this->input->cookie('some_data', TRUE);
$this->input->server()
이함수는 server변수들 에서 데이터를 가져온다는점을 빼면 위 함수와 동일합니다:
$this->input->server('some_data');
$this->input->ip_address()
현재사용자의 IP 주소를 리턴합니다. IP 주소가 유효하지 않다면 함수는 0.0.0.0 을 리턴합니다
echo $this->input->ip_address();
$this->input->valid_ip($ip)
IP 주소를 받아서 주소가 유효한지 아닌지에 따라서 TRUE 나 FALSE 를 리턴합니다. 참고: The $this->input->ip_address() 함수는 자동으로 ip 유효성을검사합니다.
if ( ! $this->input->valid_ip($ip))
{
echo 'Not Valid';
}
else
{
echo 'Valid';
}
$this->input->user_agent()
현재 사용자의 user agent (web browser) 를 리턴합니다. 유효한 값이 없을때는 FALSE 를 리턴합니다.
echo $this->input->user_agent();