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 メソッドは、文字列から 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);
|