CodeIgniter User Guide Version 1.7.2


입력클래스 Input Class

입력클래스는 두가지 목적으로 사용됩니다:

  1. 보안을 위해서 전역(global) 입력 데이터를 전처리 합니다.
  2. 입력클래스는 입력데이터를 가져오거나, 가져온 데이터를 전처리하는 헬퍼함수를 제공합니다.

참고: 이 클래스는 시스템에 의해 자동으로 초기화 되므로 여러분이 초기화 하실 필요가 없습니다.

보안 필터링 Security Filtering

컨트롤러가 호출되면 보안필터링 함수는 자동으로 호출됩니다. 필터링은 다음 작업을 수행합니다:

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()

첫번째 파라미터는 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();