入力クラス
入力クラスには2つの目的があります:
- グローバルな入力データをセキュリティのために前処理します。
- 入力データを取り出し、前処理するためのヘルパメソッドを提供します。
Note:このクラスは、システムで自動的に初期化されるので、手動で初期化する必要はありません。
セキュリティフィルタリング
セキュリティフィルタ機能は、新しいコントローラ が起動されると自動的に呼び出されます。フィルタ機能は、次のことを行います:
- グローバルな GET 配列($_GET) のデータを消去します。CodeIgniterではGET文字列(クエリ文字列)を使わないので、それを許可する理由はありません。
- register_globals がONに設定されているときにセットされるグローバル変数は消去されます。
- 英数字 (と少数の他の文字) だけを許可するよう POST/COOKIE 配列のキーがフィルタリングされます。
- XSS (クロスサイトスクリプティング攻撃) フィルタリングを提供します。この機能は、グローバルまたは、リクエストごとに有効化できます。
- 改行文字を \n に統一します。
XSS フィルタリング
CodeIgniterには、クロスサイトスクリプティング(XSS)攻撃防止フィルタが備わっています。XSSフィルタはPOSTおよびCOOKIEデータを扱うときに自動的に実行することも、項目ごとに実行することもできます。やや処理にオーバーヘッドがあり全てのケースで必要としない場合もあるので、初期状態ではグローバルに実行しないよう設定されています。
XSSフィルタは、クッキーハイジャックなどの悪事を働くと思われるJavaScriptなどのコードを仕掛けるための一般的なテクニックを探し出します。もし許可されないものがあれば、データをHTMLエンティティの文字に変換して、安全にレンダリングします。
Note: このメソッドは、送信されたデータだけを扱うべきです。かなり処理にオーバヘッドが必要になるので、実行時の一般的な処理に使用するべきではありません。
XSS フィルタにデータを通すには、次のメソッドを使います:
$this->input->xss_clean()
以下は使用例です:
$data = $this->input->xss_clean($data);
application/config/config.php ファイルを次のように設定することで POST または COOKIE データを扱う際、自動的にフィルタを実行することができます :
$config['global_xss_filtering'] = TRUE;
Note: フォームバリデーションクラスを使用している場合も、XSS フィルタリングのオプションを指定できます。
第2パラメータ(オプション)の is_image を指定すると、このメソッドは画像ファイルにXSSの可能性があるかどうかを調べることができます。ファイルのアップロードなどに有効でしょう。第2パラメータを 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');
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);
$this->input->get()
このメソッドは、get データを取り出すということ以外は、post メソッドと同じです:
$this->input->get('some_data', TRUE);
$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->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();