[from now] 2014/04/18 20:50:24

diff --git a/controller/databinding.md b/controller/databinding.md
index 78017f6..fa95eb1 100644
--- a/controller/databinding.md
+++ b/controller/databinding.md
@@ -97,3 +97,111 @@ bindData(person, params, [exclude: ["age"]])

 また、`[include: []]`といったように`include`に空のリストを指定した場合も、全てのプロパティがバインド対象になること注意してください。

+## データバインディングとセキュリティ
+
+データバインディングはとても便利な機能ですが、と同時に注意して使用すべき機能でもあります。
+特にユーザから送信されるリクエストパラメータをバインドする時に、ユーザからのリクエストパラメータによって更新されることを想定していないプロパティを、悪意のある操作で更新できないように注意する必要があります。
+
+Grailsでは、ユーザ操作によって更新対象とすべきでないプロパティが、デフォルトでバインディングの対象外に設定されています。
+バインディングの対象外に設定されているプロパティは次のとおりです。
+
+* `id`、`version`、`dateCreated`、`lastUpdated`といったGrailsが自動的に設定をするプロパティ
+* `static`を使って宣言した静的なプロパティ
+* `transient`を使って宣言した一時変数のプロパティ、またはドメインクラスで`static transients = [..]`を指定されたプロパティ
+* `def`を使って宣言した動的な型のプロパティ
+* 制約で`bindable: false`が設定されているプロパティ
+
+例えば以下に定義したドメインクラスのプロパティはバインドの対象外になります。
+
+```
+class Person {
+
+    // ドメインクラスに暗黙的に追加されるid、versionプロパティを含む
+    // Grailsが自動的に設定をするプロパティ
+    Date dateCreated
+    Date lastUpdated
+
+    // staticを使って宣言した静的なプロパティ
+    static sharedValue
+
+    // detを使って宣言した動的な型のプロパティ
+    def age
+
+    // transientを使って宣言した一時変数のプロパティ
+    // transientsで指定されたプロパティ
+    transient String password
+    String passwordCheck
+
+    static transients = ["passwordCheck"]
+
+    // bindable:falseを指定したプロパティ
+    String username
+
+    static constraints = {
+        username bindable: false
+    }
+}
+```
+
+この時、次のようなバインド処理はPersonのプロパティに対応するキーが`params`にあったとしてもバインドされません。
+
+```
+// コンストラクタの場合
+def person = new Person(params)
+
+// propertiesを使う場合
+def person = new Person()
+person.properties = params
+
+// bindDataを使う場合
+def person = new Person()
+bindData(person, params)
+```
+
+もし、これらのプロパティをバインド対象にしたい場合は、次のいずれかの方法でバインド対象にすることもできます。
+
+* バインドするときにホワイトリストで明示的に指定する
+* `bindable: true`を設定する
+
+ホワイトリストを使った方法は、先ほど説明した`properties`、`bindData`が使えます。
+
+```groovy
+// propertiesを使った場合
+def person = new Person()
+person.properties["id", "sharedValue"] = params
+
+// bindDataを使った場合
+def person = new Person()
+bindData(person, params, [include: "username", "password", "passwordCheck"])
+```
+
+`bindable: true`を使った方法は、先ほど`bindable: false`の例のように制約で設定をします。
+
+```
+class Person {
+
+    // ドメインクラスに暗黙的に追加されるid、versionプロパティを含む
+    // Grailsが自動的に設定をするプロパティ
+    Date dateCreated
+    Date lastUpdated
+
+    // staticを使って宣言した静的なプロパティ
+    static sharedValue
+
+    // detを使って宣言した動的な型のプロパティ
+    def age
+
+    // transientを使って宣言した一時変数のプロパティ
+    // transientsで指定されたプロパティ
+    transient String password
+    String passwordCheck
+
+    static transients = ["passwordCheck"]
+
+    static constraints = {
+        dateCreated bindable: true
+        lastUpdated bindable: true
+    }
+}
+```
+