Security クラス

Security クラスは、あなたのアプリケーションを CSRF から守ります。

設定

Security クラスは、app/config/config.php 設定ファイルのセキュリティセクションで設定できます。

以下のセキュリティ設定が定義可能です。

パラメータ デフォルト 説明
token_salt string
'put your salt value here...'
安全なトークンを生成するためにソルトを使用します。この文字列はランダムにし、容易に推測されないようにしてください。
csrf_token_key string
'fuel_csrf_token'
CSRF トークンクッキーの名前。トークンを含むフィールド名としても使用。
csrf_expiration integer
0
CRSF トークンクッキーの有効期限。デフォルトでは、ブラウザセッション終了時まで有効。
csrf_bad_request_on_fail boolean
false
true にすると、 CSRF トークンの検証が失敗したときに HttpBadRequestException が投げられます。 false にすると、一般的な SecurityException が投げられます。後方互換のためデフォルトは false です。
uri_filter array
array('htmlentities')
URI をフィルタするのに使用する呼び出し可能なアイテム(PHP 関数、オブジェクトメソッド、静的クラスメソッド)の配列。デフォルトでは、PHP のビルトイン関数 htmlentities を使用。
input_filter array
array()
$_GET、$_POST、$_COOKIE をフィルタするのに呼び出し可能なアイテム(PHP 関数、オブジェクトメソッド、静的クラスメソッド)の配列。デフォルトでは、未定義。
output_filter array
array('Security::htmlentities')
View または Presenter に送信する変数をフィルタするのに呼び出し可能なアイテム(PHP 関数、オブジェクトメソッド、静的クラスメソッド)の配列。 セキュリティ上、出力フィルタ(output filter)は必ず定義する必要がある。
htmlentities_flags integer
null
HTML エンティティをエンコーディングするときに使用するフラッグ。デフォルトは ENT_QUOTES。
htmlentities_double_encode boolean
null
エンコードされたものを再エンコードするかどうか。デフォルトは false
auto_filter_output boolean
true
true にすると、ビューに渡すオブジェクトはすべて自動的にエンコードされる。
whitelisted_classes array
array('stdClass', 'Fuel\\Core\\View',
'Fuel\\Core\\Presenter', 'Closure')
ビューに渡す変数の自動エンコーディングが有効なとき、オブジェクトを渡すときに問題が生じることがある。 この配列で定義したクラスは自動エンコードされない。
csrf_autoload boolean
false
true にすると、check_token() を使用して CSRF トークンを自動的にチェックする。チェックに失敗すると SecurityException 例外が投げられる。
csrf_autoload_methods array
array('post', 'put', 'delete')
csrf_autoload を true にすると、この配列にある http メソッドすべてで CSRF トークンが検証される。
csrf_auto_token boolean
false
When true, Form::open() adds CSRF token hidden field automatically.

"csrf_autoload" を有効にすると、指定したタイプの HTTP リクエストすべてで CSRF トークンを含める必要があります。さもないと、検証に失敗し、SecurityException 例外が投げられます。

オートロードが有効な場合で CSRF 検証失敗を自前で処理したい場合は、index.php で SecurityException 例外をキャッチすることができます。

check_token($value = null)

check_token メソッドは、CSRF トークンをチェックします。
check_token はトークンが存在することを保証します。また、チェックする値を受け取ったとき、(チェックの結果に関わらず) トークンを再生成します。

静的 はい
パラメータ
パラメータ デフォルト 説明
$value
null
チェックする CSRF トークン、未指定の場合は POST または JSON からの値をチェックする。
返り値 boolean
Security::check_token();

fetch_token()

fetch_token メソッドはクッキーから CSRF トークンを取得します。

静的 はい
パラメータ なし
返り値 string
$csrf_token = Security::fetch_token();

js_fetch_token()

js_fetch_token メソッドは、現在の CSRF トークンを返す JavaScript fuel_csrf_token() 関数を作成します。AJAX 操作のためにフォーム送信時に適切なフィールドに挿入します。

静的 はい
パラメータ なし
返り値 string
// javascript 関数を出力する
echo Security::js_fetch_token();

// 生成された javascript コードをページで使用できる
<script type="text/javascript">
	var current_token = fuel_csrf_token();
</script>

js_set_token()

js_set_token メソッドは、JavaScript fuel_set_csrf_token() 関数を生成します。 この関数は呼び出されたフォームに CSRF トークンフィールドをセットします。 onsubmit (フォーム送信)にこれを用いて、 csrf クッキーの値を更新します。 複数のウィンドウを開きたい場合、これを使う必要があります。 また CSRF トークンを厳密に更新する必要があります。

静的 はい
パラメータ なし
返り値 string
// javascript 関数を出力する
echo Security::js_set_token();

// 生成された関数を onsubmit 時に実行します。
// 「this」パラメータを忘れないでください。更新するフォームを関数が知るために必要です。
<form onsubmit="fuel_set_csrf_token(this);">
	<!-- do your stuff here -->
</form>

generate_token()

generate_token メソッドは、セキュリティトークンを生成します。 このメソッドは、CSRF トークンを生成するのに使用します。セキュアでランダムなトークンが必要な場合、このメソッドを アプリケーションの任意の場所で使用できます。

静的 はい
パラメータ なし
返り値 string
$token = Security::generate_token();

clean($value, $filters = null)

clean メソッドは、提供されるフィルタを用いてデータを綺麗にします。

静的 はい
パラメータ
パラメータ デフォルト 説明
$value 必須 綺麗にされる値。文字列または文字列からなる配列。
$filters
null
文字列を綺麗にするのに使用するフィルタ。フィルタは単一の値、または値からなる配列。それぞれの値は、妥当な PHP コールバック。 関数 ('htmlentities'), オブジェクト ($this), 静的メソッド ('Classname::method') を指定可能。
返り値 string
// まず strip tags を適用し、残った html エンティティを変換し、さらに特別なメソッドを適用する
$filters = array('strip_tags', 'htmlentities', '\\cleaners\\soap::clean');
$text = Security::clean($text, $filters);

strip_tags($value)

strip_tags メソッドは、文字列から HTML および PHP タグを取り除きます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$value 必須 タグを取り除かれる文字列
返り値 string
$text = '<p>Test paragraph.</p>';
$text = Security::strip_tags($text);

xss_clean($value, array $options = array())

xss_clean メソッドは、HTMLawed ライブラリを使用して、文字列から危険な HTML タグを取り除きます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$value 必須 タグを取り除かれる文字列
$options
array()
htmLawed の追加のオプション設定の配列。綺麗にする規則をカスタマイズする場合に使用する。
返り値 string
$text = '<SCRIPT>alert("XSS attack!")</SCRIPT>';
$text = Security::xss_clean($text);

htmlentities($value, $flags = null, $encoding = null, $double_encode = null)

htmlentities メソッドは、HTML 文字を実体参照に変換します。 このメソッドは、PHP の htmlentities() 関数と同じ操作ですが、 配列やオブジェクトにも適用できます。

静的 はい
パラメータ
パラメータ デフォルト 説明
$value 必須 変換される文字列。
$flags
null
htmlentities() に渡すフラグ。未指定の場合、デフォルト値は ENT_QUOTES。
$encoding
null
値の文字エンコーディング。未指定の場合、デフォルト値は FuelPHP のデフォルト文字エンコーディング。
$double_encoding
null
true の場合、エンコードされた文字列をさらにエンコードしない。未指定の場合、デフォルト値は false
返り値 mixed
例外 文字列にキャストできないオブジェクトを渡すと、RuntimeException が投げられる。
$text = '<p>Test paragraph.</p>';
$text = Security::htmlentities($text);

手続き型ヘルパ

e($string)

e 関数は、Security::htmlentities の別名。

パラメータ
パラメータ デフォルト 説明
$string 必須 タグを取り除かれる文字列。
返り値 string、Security::htmlentities の返り値
$text = '<p>Test paragraph.</p>';
$text = e($text);