Skip to content

Commit

Permalink
docs/guide-ja updated [ci skip] (yiisoft#11537)
Browse files Browse the repository at this point in the history
* docs/guide-ja translations updated [skip ci]

* docs/guide-ja security-* updated [ci skip]
  • Loading branch information
softark authored and cebe committed May 10, 2016
1 parent 2eb90f8 commit e96f956
Show file tree
Hide file tree
Showing 12 changed files with 151 additions and 125 deletions.
3 changes: 3 additions & 0 deletions docs/guide-ja/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -109,9 +109,12 @@ All Rights Reserved.
セキュリティ
------------

* [概要](security-overview.md)
* [認証](security-authentication.md)
* [権限付与](security-authorization.md)
* [パスワードを扱う](security-passwords.md)
* [暗号化](security-cryptography.md)
* [ビューのセキュリティ](structure-views.md#security)
* [認証クライアント](https://github.com/yiisoft/yii2-authclient/blob/master/docs/guide-ja/README.md)
* [ベストプラクティス](security-best-practices.md)

Expand Down
4 changes: 3 additions & 1 deletion docs/guide-ja/concept-di-container.md
Original file line number Diff line number Diff line change
Expand Up @@ -287,7 +287,7 @@ Yii は、新しいオブジェクトを作成するさい、そのコアコー
\Yii::$container->set('yii\widgets\LinkPager', ['maxButtonCount' => 5]);
```

次のコードでビューでウィジェットを使用すれば、 `maxButtonCount` プロパティは、
そして、次のコードでビューでウィジェットを使用すれば、`maxButtonCount` プロパティは、
クラスで定義されているデフォルト値 10 の代わりに 5 で初期化されます。

```php
Expand All @@ -300,6 +300,8 @@ echo \yii\widgets\LinkPager::widget();
echo \yii\widgets\LinkPager::widget(['maxButtonCount' => 20]);
```

> Tip: どのような型の値であろうとも上書きされますので、オプションの配列の指定には気を付けてください。オプションの配列はマージされません。
DI コンテナの自動コンストラクタ・インジェクションの利点を活かす別の例です。
あなたのコントローラクラスが、ホテル予約サービスのような、いくつかの他のオブジェクトに依存するとします。
あなたは、コンストラクタパラメータを通して依存関係を宣言して、DI コンテナにあなたの課題を解決させることができます。
Expand Down
7 changes: 7 additions & 0 deletions docs/guide-ja/db-migrations.md
Original file line number Diff line number Diff line change
Expand Up @@ -668,6 +668,10 @@ class m150101_185401_create_news_table extends Migration
* [[yii\db\Migration::dropForeignKey()|dropForeignKey()]]: 外部キーを削除
* [[yii\db\Migration::createIndex()|createIndex()]]: インデックスを作成
* [[yii\db\Migration::dropIndex()|dropIndex()]]: インデックスを削除
* [[yii\db\Migration::addCommentOnColumn()|addCommentOnColumn()]: カラムにコメントを追加
* [[yii\db\Migration::dropCommentFromColumn()|dropCommentFromColumn()]: カラムからコメントを削除
* [[yii\db\Migration::addCommentOnTable()|addCommentOnTable()]: テーブルにコメントを追加
* [[yii\db\Migration::dropCommentFromTable()|dropCommentFromTable()]: テーブルからコメントを削除

> Info: [[yii\db\Migration]] は、データベースクエリメソッドを提供しません。
これは、通常、データベースからのデータ取得については、メッセージを追加して表示する必要がないからです。
Expand All @@ -692,6 +696,9 @@ yii migrate
リストされたマイグレーションを適用することをあなたが確認すると、タイムスタンプの値の順に、一つずつ、すべての新しいマイグレーションクラスの `up()` または `safeUp()` メソッドが実行されます。
マイグレーションのどれかが失敗した場合は、コマンドは残りのマイグレーションを適用せずに終了します。

> Tip: あなたのサーバでコマンドラインを使用できない場合は
> [web shell](https://github.com/samdark/yii2-webshell) エクステンションを使ってみてください。
適用が成功したマイグレーションの一つ一つについて、`migration` という名前のデータベーステーブルに行が挿入されて、マイグレーションの成功が記録されます。
この記録によって、マイグレーションツールは、どのマイグレーションが適用され、どのマイグレーションが適用されていないかを特定することが出来ます。

Expand Down
21 changes: 21 additions & 0 deletions docs/guide-ja/db-query-builder.md
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,20 @@ $query->filterWhere([
[[yii\db\Query::andWhere()|andWhere()]] または [[yii\db\Query::orWhere()|orWhere()]] と同じように、[[yii\db\Query::andFilterWhere()|andFilterWhere()]] または [[yii\db\Query::orFilterWhere()|orFilterWhere()]] を使って、既存の条件に別のフィルタ条件を追加することも出来ます。

さらに加えて、値の方に含まれている比較演算子を適切に判断してくれる [[yii\db\Query::andFilterCompare()]] があります。

```php
$query->andFilterCompare('name', 'John Doe');
$query->andFilterCompare('rating', '>9');
$query->andFilterCompare('value', '<=100');
```

比較演算子を明示的に指定することも可能です。

```php
$query->andFilterCompare('name', 'Doe', 'like');
```

### [[yii\db\Query::orderBy()|orderBy()]] <span id="order-by"></span>

[[yii\db\Query::orderBy()|orderBy()]] メソッドは SQL クエリの `ORDER BY` 句を指定します。例えば、
Expand Down Expand Up @@ -580,6 +594,13 @@ $query = (new \yii\db\Query())

この無名関数は、現在の行データを含む `$row` というパラメータを取り、現在の行のインデックス値として使われるスカラ値を返さなくてはなりません。

> Note: [[yii\db\Query::groupBy()|groupBy()]][[yii\db\Query::orderBy()|orderBy()]]
> のようなクエリメソッドが SQL に変換されてクエリの一部となるのとは対照的に、
> このメソッドはデータベースからデータが取得された後で動作します。
> このことは、クエリの SELECT に含まれるカラム名だけを使うことが出来る、ということを意味します。
> また、テーブルプレフィックスを付けてカラムを選択した場合、例えば `customer.id` を選択した場合は、
> リザルトセットのカラム名は `id` しか含みませんので、テーブルプレフィックス無しで `->indexBy('id')` と呼ぶ必要があります。

## バッチクエリ <span id="batch-query"></span>

Expand Down
4 changes: 4 additions & 0 deletions docs/guide-ja/input-forms.md
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ $form = ActiveForm::begin([
例えば、上記の例における `username` 属性のインプットフィールドの名前は `LoginForm[username]` となります。
この命名規則の結果として、ログインフォームの全ての属性が配列として、サーバ側においては `$_POST['LoginForm']` に格納されて利用できることになります。

> Tip: 一つのフォームに一つのモデルだけがある場合、インプットの名前を単純化したいときは、
> モデルの [[yii\base\Model::formName()|formName()]] メソッドをオーバーライドして空文字列を返すようにして、配列の部分をスキップすることが出来ます。
> この方法を使えば、[GridView](output-data-widgets.md#grid-view) で使われるフィルターモデルで、もっと見栄えの良い URL を生成させることが出来ます。
モデルの属性を指定するために、もっと洗練された方法を使うことも出来ます。
例えば、複数のファイルをアップロードしたり、複数の項目を選択したりする場合に、属性の名前に `[]` を付けて、属性が配列の値を取り得ることを指定することが出来ます。

Expand Down
24 changes: 24 additions & 0 deletions docs/guide-ja/input-validation.md
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,27 @@ public function rules()

属性は、上記の検証のステップに従って、`scenarios()` でアクティブな属性であると宣言されており、かつ、`rules()` で宣言された一つまたは複数のアクティブな規則と関連付けられている場合に、また、その場合に限って、検証されます。

> Note: 規則に名前を付けると便利です。すなわち、
> ```php
> public function rules()
> {
> return [
> // ...
> 'password' => [['password'], 'string', 'max' => 60],
> ];
> }
> ```
>
> これを子のモデルで使うことが出来ます。
>
> ```php
> public function rules()
> {
> $rules = parent::rules();
> unset($rules['password']);
> return $rules;
> }
### エラーメッセージをカスタマイズする <span id="customizing-error-messages"></span>
Expand Down Expand Up @@ -526,6 +547,9 @@ JS;
> ]
> ```

> Tip: クライアント側の検証を手動で操作する必要がある場合、すなわち、動的にフィールドを追加したり、何か特殊な UI ロジックを実装する場合は、
> Yii 2.0 Cookbook の [Working with ActiveForm via JavaScript](https://github.com/samdark/yii2-cookbook/blob/master/book/forms-activeform-js.md) を参照してください。

### Deferred 検証 <span id="deferred-validation"></span>

非同期のクライアント側の検証をサポートする必要がある場合は、[Defered オブジェクト](http://api.jquery.com/category/deferred-object/) を作成することが出来ます。
Expand Down
3 changes: 3 additions & 0 deletions docs/guide-ja/output-data-widgets.md
Original file line number Diff line number Diff line change
Expand Up @@ -392,6 +392,9 @@ class PostSearch extends Post

```

> Tip: フィルタのクエリを構築する方法を学ぶためには、[クエリビルダ](db-query-builder.md)
> 中でも特に [フィルタ条件](db-query-builder.md#filter-conditions) を参照してください。
この `search()` メソッドをコントローラで使用して、GridView のためのデータプロバイダを取得することが出来ます。

```php
Expand Down
2 changes: 2 additions & 0 deletions docs/guide-ja/runtime-sessions-cookies.md
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,8 @@ Yii は個々のクッキーを [[yii\web\Cookie]] のオブジェクトとし
[[yii\web\Request]] と [[yii\web\Response]] は、ともに、`cookies` という名前のプロパティによって、クッキーのコレクションを保持します。
後者のクッキーコレクションはリクエストの中で送信されてきたクッキーを表し、一方、後者のクッキーコレクションは、これからユーザに送信されるクッキーを表します。
アプリケーションで、リクエストとレスポンスを直接に操作する部分は、コントローラです。
従って、クッキーの読み出しと送信はコントローラで実行されるべきです。
### クッキーを読み出す <span id="reading-cookies"></span>
Expand Down
68 changes: 68 additions & 0 deletions docs/guide-ja/security-cryptography.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
暗号化
======

個の節では、セキュリティの以下の側面について見ていきます。

- 乱数データの生成
- 暗号化と複合化
- データの完全性の確認


擬似乱数データを生成する
------------------------

擬似乱数データはさまざまな状況で役に立ちます。
例えば、メール経由でパスワードをリセットするときは、トークンを生成してデータベースに保存し、それをユーザにメールで送信します。
そして、ユーザはこのトークンを自分がアカウントの所有者であることの証拠として使用します。
このトークンがユニークかつ推測困難なものであることは非常に重要なことです。
さもなくば、攻撃者がトークンの値を推測してユーザのパスワードをリセットする可能性があります。

Yii のセキュリティヘルパは擬似乱数データの生成を単純な作業にしてくれます。


```php
$key = Yii::$app->getSecurity()->generateRandomString();
```

暗号化と復号化
--------------

Yii は秘密鍵を使ってデータを暗号化/復号化することを可能にする便利なヘルパ関数を提供しています。
データを暗号化関数に渡して、秘密鍵を持つ者だけが復号化することが出来るようにすることが出来ます。
例えば、何らかの情報をデータベースに保存する必要があるけれども、(たとえアプリケーションのデータベースが第三者に漏洩した場合でも) 秘密鍵を持つユーザだけがそれを見ることが出来るようにする必要がある、という場合には次のようにします。

```php
// $data と $secretKey はフォームから取得する
$encryptedData = Yii::$app->getSecurity()->encryptByPassword($data, $secretKey);
// $encryptedData をデータベースに保存する
```

そして、後でユーザがデータを読みたいときは、次のようにします。

```php
// $secretKey はユーザ入力から取得、$encryptedData はデータベースから取得
$data = Yii::$app->getSecurity()->decryptByPassword($encryptedData, $secretKey);
```

[[\yii\base\Security::encryptByKey()]][[\yii\base\Security::decryptByKey()]] によって、パスワードの代わりにキーを使うことも可能です。


データの完全性を確認する
------------------------

データが第三者によって改竄されたり、更には何らかの形で毀損されたりしていないことを確認する必要がある、という場合があります。
Yii は二つのヘルパ関数の形で、データの完全性を確認するための簡単な方法を提供しています。

秘密鍵とデータから生成されたハッシュをデータにプレフィクスします。

```php
// $secretKey はアプリケーションまたはユーザの秘密、$genuineData は信頼できるソースから取得
$data = Yii::$app->getSecurity()->hashData($genuineData, $secretKey);
```

データの完全性が毀損されていないかチェックします。

```php
// $secretKey はアプリケーションまたはユーザの秘密、$data は信頼できないソースから取得
$data = Yii::$app->getSecurity()->validateData($data, $secretKey);
```
14 changes: 14 additions & 0 deletions docs/guide-ja/security-overview.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
セキュリティ
============

十分なセキュリティは、すべてのアプリケーションの健全さと成功のために欠くことが出来ないものです。
不幸なことに、理解が不足しているためか、実装の難易度が高すぎるためか、セキュリティのことになると手を抜く開発者がたくさんいます。
Yii によって駆動されるあなたのアプリケーションを可能な限り安全にするために、Yii はいくつかの優秀な使いやすいセキュリティ機能を内蔵しています。

* [認証](security-authentication.md)
* [権限付与](security-authorization.md)
* [パスワードを扱う](security-passwords.md)
* [暗号化](security-cryptography.md)
* [ビューのセキュリティ](structure-views.md#security)
* [認証クライアント](https://github.com/yiisoft/yii2-authclient/blob/master/docs/guide-ja/README.md)
* [ベストプラクティス](security-best-practices.md)
Loading

0 comments on commit e96f956

Please sign in to comment.