입력 Input Class

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

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

Note

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

입력 필터링 Input Filtering

보안 필터링 Security Filtering

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

  • If $config['allow_get_array'] 를FALSE로 설정할 경우(기본값 TRUE)전역(global) GET 배열을 삭제합니다.
  • 만약 register_globals 가 on 되어 있는 경우라면 모든 전역(global)변수들을 삭제합니다.
  • GET/POST/COOKIE 배열의 키들을 필터링하여 영문자나 숫자만(그리고 다른것도 약간) 허용합니다.
  • XSS (Cross-site Scripting Hacks) 필터링을 제공합니다. 이는 전역적으로 활성화 될 수도 있고, 요청에 따라 활성화 될 수도 있습니다.
  • 줄바꿈 문자를 PHP_EOL 로 표준화 합니다 (유닉스의 경우 \n, 윈도우의 경우 \r\n)

XSS Filtering

입력 클래스는 크로스 사이트 스크립팅 공격을 방지하기 위해 자동으로 입력 값을 필터링하는 기능이 있습니다. application/config/config.php 파일을 다음과 같이 설정하여 POST 또는 COOKIE 데이터를 처리할 때 자동으로 필터를 실행할 수 있습니다:

$config['global_xss_filtering'] = TRUE;

응용 프로그램에서 XSS 필터링을 사용하는 방법은 보안클래스 (Security class) 를 참조하십시오.

Important

‘global_xss_filtering’ 세팅은 DEPRECATED 되었습니다. 그리고 오직 이전 버전과의 호환성 때문에 유지됩니다. XSS 이스케이프는 output 에서 진행되어야 합니다., input 이 아닌!

폼 데이터에 접근 Accessing form data

POST, GET, COOKIE, 혹은 SERVER 데이터 사용하기 Using POST, GET, COOKIE, or SERVER Data

CodeIgniter는 POST, COOKIE 혹은 SERVER 아이템을 가져오기 위해서 3가지 헬퍼함수를 제공합니다. 각 아이템들을 직접 가져오는 것보다($_POST['something']) 헬퍼를 사용하면 더 좋은 이유는, 헬퍼가 아이템이 세팅되어 있는지를 먼저 체크하고 세팅되어있지 않다면 FALSE를 반환하기 때문입니다. 아이템이 존재하는지 먼저 검사하고 처리할 필요가 없어집니다. 다시말하면, 일반적으로 여러분안 아래와 같이 프로그램할 것입니다:

$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

If you want to utilize the PUT, DELETE, PATCH or other exotic request methods, they can only be accessed via a special input stream, that can only be read once. This isn’t as easy as just reading from e.g. the $_POST array, because it will always exist and you can try and access multiple variables without caring that you might only have one shot at all of the POST data.

CodeIgniter will take care of that for you, and you can read the data from the php://input stream at any time, just by using the $raw_input_stream property:

$this->input->raw_input_stream;

Additionally if the input stream is form-encoded like $_POST you can access its values by calling the input_stream() method:

$this->input->input_stream('key');

Similar to other methods such as get() and post(), if the requested data is not found, it will return NULL and you can also decide whether to run the data through xss_clean() by passing a boolean value as the second parameter:

$this->input->input_stream('key', TRUE); // XSS Clean
$this->input->input_stream('key', FALSE); // No XSS filter

Note

You can utilize method() in order to know if you’re reading PUT, DELETE or PATCH data.

클래스 레퍼런스 Class Reference

class CI_Input
$raw_input_stream

읽기 전용 속성은 php://input 데이터를 반환합니다.

속성은 여러 번 읽어질 수 있습니다.

post([$index = NULL[, $xss_clean = NULL]])
인수:
  • $index (mixed) – POST parameter name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

$_POST if no parameters supplied, otherwise the POST value if found or NULL if not

반환형:

mixed

첫 번째 파라미터는 POST 아이템의 이름(name)이 들어갑니다:

$this->input->post('some_data');

찾고자 하는 아이템이 존재하지 않으면 함수는 NULL 를 리턴합니다.

선택적으로 사용하는 두 번째 파라미터는 데이터를 XSS 필터링 되게 합니다. 두 번째 파라미터를 TRUE로 하거나 $config['global_xss_filtering'] 를 TRUE 로 설정하시면 됩니다.

$this->input->post('some_data', TRUE);

파라미터를 지정하지 않고 호출하면 POST로 넘어오는 모든 값을 연관 배열로 리턴합니다.

첫 번째 파라미터를 NULL로 하고, 두 번째 인수에 부울(boolean)값을 넘겨주면,부울값에 따라모든 POST값에 XSS필터를 적용하거나,하지 않을 수 있습니다.

$this->input->post(NULL, TRUE); // returns all POST items with XSS filter
$this->input->post(NULL, FALSE); // returns all POST items without XSS filter

여러 POST 파라미터를 배열로 반환하려면, 키를 배열로 전달하세요.

$this->input->post(array('field1', 'field2'));

똑같은 규칙이 여기 적용되어 있습니다, XSS 필터링하게 할려면, 두 번째 파라미터의 값을 TRUE 로 설정하세요.

$this->input->post(array('field1', 'field2'), TRUE);
get([$index = NULL[, $xss_clean = NULL]])
인수:
  • $index (mixed) – GET parameter name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

$_GET if no parameters supplied, otherwise the GET value if found or NULL if not

반환형:

mixed

이 함수는 GET 데이터를 가져온다는 점만 빼면 post() 함수와 동일합니다.

$this->input->get('some_data', TRUE);

파라미터를 지정하지 않고 호출하면 GET으로 넘어오는 모든 값을 연관 배열로 리턴합니다.

첫 번째 파라미터를 NULL로 하고, 두 번째 인수에 부울(boolean)값을 넘겨주면,부울값에 따라모든 GET값에 XSS필터를 적용하거나,하지 않을 수 있습니다.

$this->input->get(NULL, TRUE); // returns all GET items with XSS filter
$this->input->get(NULL, FALSE); // returns all GET items without XSS filtering

여러 GET 파라미터를 배열로 반환하려면, 키를 배열로 전달하세요.

$this->input->get(array('field1', 'field2'));

똑같은 규칙이 여기 적용되어 있습니다, XSS 필터링하게 할려면, 두 번째 파라미터의 값을 TRUE 로 설정하세요.

$this->input->get(array('field1', 'field2'), TRUE);
post_get($index[, $xss_clean = NULL])
인수:
  • $index (string) – POST/GET parameter name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

POST/GET value if found, NULL if not

반환형:

mixed

이 함수는 post()get() 을 모두 뒤져서 데이터를 가져옵니다. POST 를 먼저찾고 그 다음 GET 을 찾습니다:

$this->input->post_get('some_data', TRUE);
get_post($index[, $xss_clean = NULL])
인수:
  • $index (string) – GET/POST parameter name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

GET/POST value if found, NULL if not

반환형:

mixed

이 함수는 post_get() 와 똑같습니다. 다만 GET 데이터를 먼저 찾습니다.

$this->input->get_post(‘some_data’, TRUE);

Note

이 함수가 원래 post_get() 와 완전 같은 함수였습니다, 그러나 함수 내용이 CodeIgniter 3.0 부터 변경되었습니다.

cookie([$index = NULL[, $xss_clean = NULL]])
인수:
  • $index (mixed) – COOKIE name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

$_COOKIE if no parameters supplied, otherwise the COOKIE value if found or NULL if not

반환형:

mixed

이 함수는 post()get() 함수와 동일합니다, 다만 cookie 데이터를 가져온다는 것만 다릅니다:

$this->input->cookie('some_cookie');
$this->input->cookie('some_cookie, TRUE); // with XSS filter

여러 COOKIE 파라미터를 배열로 반환하려면, 키를 배열로 전달하세요.

$this->input->cookie(array('some_cookie', 'some_cookie2'));

Note

쿠키(Cookie Helper)get_cookie() 함수와는 다르게, 이 함수는 $config['cookie_prefix'] 값을 접두어로 사용하지 않습니다.

server($index[, $xss_clean = NULL])
인수:
  • $index (mixed) – Value name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

$_SERVER item value if found, NULL if not

반환형:

mixed

이 함수는 post(), get() 그리고 cookie() 함수와 같습니다, 다만 서버 데이터 ($_SERVER) 를 가져온다는 것만 다릅니다:

$this->input->server('some_data');

여러 $_SERVER 파라미터를 배열로 반환하려면, 키를 배열로 전달하세요.

$this->input->server(array('SERVER_PROTOCOL', 'REQUEST_URI'));
input_stream([$index = NULL[, $xss_clean = NULL]])
인수:
  • $index (mixed) – Key name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

Input stream array if no parameters supplied, otherwise the specified value if found or NULL if not

반환형:

mixed

이 함수는 get(), post() 그리고 cookie() 와 같습니다, 다만 php://input 스트림 데이터를 가져온 다는 것만 다릅니다.

인수:
  • $name (mixed) – Cookie name or an array of parameters
  • $value (string) – Cookie value
  • $expire (int) – Cookie expiration time in seconds
  • $domain (string) – Cookie domain
  • $path (string) – Cookie path
  • $prefix (string) – Cookie name prefix
  • $secure (bool) – Whether to only transfer the cookie through HTTPS
  • $httponly (bool) – Whether to only make the cookie accessible for HTTP requests (no JavaScript)
반환형:

void

쿠키를 생성합니다. 이 함수를 이용해서 쿠키를 생성하는데는 두 가지 방법이 있습니다. 하나는 배열을 넘겨주는 것이고 다른 하나는 개별변수를 넘겨주는 것입니다:

배열을 이용하는 방법

연관배열을 첫 번째 파라미터로 넘겨주면 됩니다:

$cookie = array(
        'name'   => 'The Cookie Name',
        'value'  => 'The Value',
        'expire' => '86500',
        'domain' => '.some-domain.com',
        'path'   => '/',
        'prefix' => 'myprefix_',
        'secure' => TRUE
);

$this->input->set_cookie($cookie);

주의

이름(name)과 값(value) 만을 사용해야 합니다. 쿠키를 삭제하려면 만료시간(expire)에 공백을 넣습니다.

만료시간은 단위이며, 현재 시간 + 지정한 만료시간으로 설정될 것입니다. 개발자는 현재 시간을 고려할 필요없이 지금으로부터 몇 초 후에 쿠키가 만료될지만 지정하시면 됩니다. 만료시간을 0으로 하면 브라우저가 열려있는 동안에만 쿠키가 살아있습니다.

사이트 요청방법에 상관 없이 전체 사이트에 적용할 쿠키는 domain 항목에 점으로 시작하는 사이트 주소를 적으시면 됩니다. 예: .your-domain.com

보통 패스(path)부분은 신경쓸 필요가 없습니다. 함수가 루트패스를 알아서 설정합니다.

서버의 다른 쿠키와 이름이 같을 가능성이 있을 경우에만, 접두어(prefix)를 설정하세요.

보안 부울 값은 보안 쿠키를 사용하려는 경우에만 TRUE로해야 합니다.

개별 매개 변수를 전달하는 방법

아래와 같이 각각 전달합니다:

$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);
ip_address()
반환값:Visitor’s IP address or ‘0.0.0.0’ if not valid
반환형:string

현재사용자의 IP 주소를 리턴합니다. IP 주소가 유효하지 않다면 함수는 ‘0.0.0.0’ 을 리턴합니다:

echo $this->input->ip_address();

Important

This method takes into account the $config['proxy_ips'] setting and will return the reported HTTP_X_FORWARDED_FOR, HTTP_CLIENT_IP, HTTP_X_CLIENT_IP or HTTP_X_CLUSTER_CLIENT_IP address for the allowed IP addresses.

valid_ip($ip[, $which = ''])
인수:
  • $ip (string) – IP address
  • $which (string) – IP protocol (‘ipv4’ or ‘ipv6’)
반환값:

TRUE if the address is valid, FALSE if not

반환형:

bool

IP 주소를 받아서 주소가 유효한지 아닌지에 따라서 TRUE 나 FALSE를 리턴합니다.

Note

$this->input->ip_address() 함수는 자동으로 ip 유효성을검사합니다.

if ( ! $this->input->valid_ip($ip))
{
        echo 'Not Valid';
}
else
{
        echo 'Valid';
}

IP 포맷을 구분하기 위해 ‘ipv4’ 와 ‘ipv6’ 를 구분하는 두 번째 파라미터를 옵션으로 허용합니다. 기본으로는 2가지 모두를 체크합니다.

user_agent([$xss_clean = NULL])
반환값:

User agent string or NULL if not set

인수:
  • $xss_clean (bool) – Whether to apply XSS filtering
반환형:

mixed

현재 사용자의 user agent (web browser) 를 리턴합니다. 유효한 값이 없을 때는 NULL 을 리턴합니다.

echo $this->input->user_agent();

user agent 문자열 정보에 관해 User Agent Class 를 참조해주세요.

request_headers([$xss_clean = FALSE])
인수:
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

An array of HTTP request headers

반환형:

array

Apache 이외 (apache_request_headers() 를 지원하지 않는) 환경에서 유용합니다. 헤더의 배열을 반환합니다.

$headers = $this->input->request_headers();
get_request_header($index[, $xss_clean = FALSE])
인수:
  • $index (string) – HTTP request header name
  • $xss_clean (bool) – Whether to apply XSS filtering
반환값:

An HTTP request header or NULL if not found

반환형:

문자열

요청 헤더의 배열에서 지정한 요소를 반환합니다.

$this->input->get_request_header('some-header', TRUE);
is_ajax_request()
반환값:TRUE if it is an Ajax request, FALSE if not
반환형:bool

서버 헤더에 HTTP_X_REQUESTED_WITH 가 설정되어 있는지 확인하고 결과를 부울(TRUE,FALSE)로 반환합니다.

is_cli_request()
반환값:TRUE if it is a CLI request, FALSE if not
반환형:bool

PHP가 커맨드 라인에서 실행되고 있는지 확인하는 안전한 방법입니다.

Note

이 함수는 현재 사용되고 있는 PHP SAPI 이름과 STDIN 상수가 정의되어 있는지 확인합니다, 이는 일반적으로 PHP가 코멘드라인(command line)을 통해 실행되는 지 보는 안전한 방법입니다.

$this->input->is_cli_request()

Note

이 함수는 DEPRECATED 되었습니다. 그리고 지금은 is_cli() 함수의 Alias 로 사용됩니다.

method([$upper = FALSE])
인수:
  • $upper (bool) – Whether to return the request method name in upper or lower case
반환값:

HTTP request method

반환형:

문자열

$_SERVER['REQUEST_METHOD']를 반환합니다, 대소문자 옵션을 설정할 수 있습니다.

echo $this->input->method(TRUE); // Outputs: POST
echo $this->input->method(FALSE); // Outputs: post
echo $this->input->method(); // Outputs: post