# CodeIgniter ユーザガイド 日本語版 Version 2.0.3

ユーザガイドを検索

# 入力クラス

入力クラスには2つの目的があります:

1. グローバルな入力データをセキュリティのために前処理します。
2. 入力データを取り出し、前処理するためのヘルパーメソッドを提供します。

Note: このクラスは、システムで自動的に初期化されるので、手動で初期化する必要はありません。

## セキュリティフィルタリング

セキュリティフィルタ機能は、新しいコントローラ が起動されると自動的に呼び出されます。フィルタ機能は、次のことを行います:

- グローバルな GET 配列($_GET) のデータを消去します。CodeIgniter では GET 文字列(クエリ文字列)を使わないので、それを許可する理由はありません。
- register_globals が ON に設定されているときにセットされるグローバル変数は消去されます。
- 英数字 (と少数の他の文字) だけを許可するよう POST/COOKIE 配列のキーがフィルタリングされます。
- XSS (クロスサイトスクリプティング攻撃) フィルタリングを提供します。この機能は、グローバルまたは、リクエストごとに有効化できます。
- 改行文字を \n に統一します。

## XSS フィルタリング

入力クラスではクロスサイトスクリプティング攻撃を防ぐ為、自動的に入力値をフィルタする機能が備わっています。`application/config/config.php` ファイルを次のように設定することで POST または COOKIE データを扱う際、自動的にフィルタを実行することができます :

`$config['global_xss_filtering'] = TRUE;`

アプリケーション内で XSS フィルタリングを利用する方法については セキュリティクラス を参照してください。

## 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');`

3つのメソッドは次の通りです:

- $this->input->post()
- $this->input->cookie()
- $this->input->server()

## $this->input->post()

第1引数は、コレクションの中から探し出す POST された項目の名前になります:

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

このメソッドは、取り出そうとして見つからなかった場合、FALSE (ブール値) を返します。

第2引数は、オプションで、データを XSS フィルタに通すかどうかを指定します。XSS フィルタは、第2引数をブール値の TRUE に設定することで有効になります:

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

引数を指定せずに呼び出すことで、POST されたすべての値を連想配列で返します。

第1引数をブランク、第2引数にブール値を指定することで、POST されたすべての値を XSS フィルタに通すことができます。

このメソッドは、取り出そうとして見つからなかった場合、FALSE (ブール値) を返します。

`$this->input->post(); // POSTされた値をXSSフィルタを通して返します
$this->input->post(NULL, FALSE); // POSTされた値をXSSフィルタを通さずに返します`

## $this->input->get()

このメソッドは、get データを取り出すということ以外は、post メソッドと同じです:

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

引数を指定せずに呼び出すことで、GET されたすべての値を連想配列で返します。

第1引数をブランク、第2引数にブール値を指定することで、GET されたすべての値を XSS フィルタに通すことができます。

このメソッドは、取り出そうとして見つからなかった場合、FALSE (ブール値) を返します。

`$this->input->get(); // GETされた値をXSSフィルタを通して返します
$this->input->get(NULL, FALSE); // GETされた値をXSSフィルタを通さずに返します`

## $this->input->get_post()

このメソッドは、get と post 両方のデータを取得対象としています、まず最初に 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->set_cookie()

指定した値を含むクッキーをセットします。クッキーをセットする為にこのメソッドに情報を渡すには、2つの方法があります: 配列で渡す方法と個々のパラメータを渡す方法です:

#### 配列で渡す方法

この方法では、第1引数に連想配列が渡されます:

`$cookie = array(
'name' => 'クッキー名',
'value' => '値',
'expire' => '86500',
'domain' => '.some-domain.com',
'path' => '/',
'prefix' => 'myprefix_',
'secure' => TRUE
);
$this->input->set_cookie($cookie);`

Notes:

name と value のみが必須属性となります。クッキーを削除するには有効期限に空白をセットします。

有効期限は現在時刻から数えた秒数で指定します。時刻を指定するのではなく、クッキーを現在時刻から 何秒間有効かを秒数だけで指定します。 有効期限を 0 にセットすると、ブラウザが開いている間だけ、クッキーが有効になります。

どのようにリクエストを受け付けたかにかかわらず、サイト全体で使うクッキーには、次のように domain にピリオドから始まる URL を追加してください: .your-domain.com

パスは、メソッドがルートパスをセットするので通常は必要ありません。

プリフィックスは、同一のサーバによってセットされたクッキーにおける名前の衝突を回避したい場合にのみ必要です。

セキュアのブール値は、セキュアなクッキーを使用したい場合のみ TRUE にする必要があります。

#### 個々のパラメータを渡す方法

希望であれば、個別のパラメータを使ってデータを渡してクッキーをセットすることができます:

`$this->input->set_cookie($name, $value, $expire, $domain, $path, $prefix, $secure);`

## $this->input->cookie()

クッキーを読み取ることができます。第1引数は、読み取るクッキーの名前になります (プリフィックスがある場合はそれも):

`cookie('some_cookie');`

この関数は、読み取ろうとするクッキーが存在しない場合に FALSE (ブール値) を返します。

オプションの第2引数で、データを XSS フィルタに通すことができます。この機能は、第2引数にブール値の TRUE をセットすることで有効になります;

`cookie('some_cookie', TRUE);`

## $this->input->ip_address()

現在のユーザの IP アドレスを返します。IP アドレスが正しくない場合、このメソッドは、次の IP アドレスを返します: 0.0.0.0

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

## $this->input->valid_ip($ip)

IP アドレスを入力としてとり、IP アドレスとして妥当かどうかに応じて TRUE か FALSE (ブール値) を返します。Note: 上の $this->input->ip_address() メソッドは、 IP の検証を自動的に行います。

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

## $this->input->user_agent()

現在のユーザが使用しているユーザエージェント(Web ブラウザ)を返します。利用できないときは FALSE を返します。

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

ユーザエージェントの文字列から情報を抽出する方法はユーザエージェントクラスを参照してください。

## $this->input->request_headers()

Apache 以外 (apache_request_headers() をサポートしない) 環境で有効です。ヘッダの配列を返します。

`$headers = $this->input->request_headers();`

## $this->input->get_request_header();

リクエストヘッダの配列から指定した要素を返します。

`$this->input->get_request_header('some-header', TRUE);`

## $this->input->is_ajax_request()

サーバのヘッダに HTTP_X_REQUESTED_WITH がセットされているかチェックし, boolean で返します。

## $this->input->is_cli_request()

STDIN 定数がセットされているかチェックします。PHP がコマンドラインから実行されているか確認するフェイルセーフな方法です。

`$this->input->is_cli_request()`