回答編集履歴

3

追記

2016/12/02 13:58

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -57,3 +57,61 @@
57
57
  - フォームの入力値はバリデートする
58
58
 
59
59
  - findなどのSQLインジェクションセーフな関数を使う
60
+
61
+
62
+
63
+ ----
64
+
65
+
66
+
67
+ **(追記) コメント欄の追加の説明をここに記載します**
68
+
69
+
70
+
71
+ > 今使っているのはCakephp2.7.7なのですが、このバージョンでもフォームヘルパーを使えば自動でCSRF対策は行われるのでしょうか?
72
+
73
+
74
+
75
+ Cakephp2のCSRF対策は、Securityコンポーネントの一部なので、このコンポーネントを有効にすれば対策されます。出力されたHTMLの<form>内にtokenが追加されるので見てみたり、値を変更してpostしてみるといいと思います。
76
+
77
+
78
+
79
+ > 第二に、マニュアルを読んだのですが、フォーム改ざん防止のところに
80
+
81
+ •フォームに新規フィールドを追加することはできません。
82
+
83
+ •フォームからフィールドを削除することはできません。
84
+
85
+ •hidden フィールドの値を更新することはできません。
86
+
87
+ と記載されていますが、ラジオボタン、セレクトボックスなどは使うことができるのでしょうか?
88
+
89
+ (テキストしかダメということではないですよね?)
90
+
91
+
92
+
93
+ 基本的にはFormヘルパーで出力したフィールドは大丈夫ですが、javascriptなどで動的にフィールドを追加するような処理があるなら改ざんをみなされてしまいます。そういう場合は、Formヘルパーの[unlockField](http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html#FormHelper::unlockField)で定義しておけば回避できます。hiddenの更新もこれを使えばできるようになります。
94
+
95
+
96
+
97
+ > htmlの書き方ではだめで、echo $form->createのようにフォームヘルパーを使わないとダメという認識でよろしいのでしょうか?
98
+
99
+
100
+
101
+ はい、基本的にformの出力は全部Fromヘルパーを使う必要があります。
102
+
103
+
104
+
105
+ > また、mysqlからデータを取り出してくるのは、自分の場合はすべてfindでやっているので、既にSQLインジェクションの対策は施してあると捉えていいんですよね?
106
+
107
+
108
+
109
+ はい、いいと思います。試しにパラメータをもらうfindがあるなら、シングルコーテーションなどエスケープしないとエラーがでる文字を渡してみるとわかると思いますよ。
110
+
111
+
112
+
113
+ > もしかしたら確認するまでもない初心者がにじみ出てる疑問ですみません、不安なもので。
114
+
115
+
116
+
117
+ 必ずご自身でテスト(不正な処理を実施)してみるといいと、理解も深まりますし、不安もなくなると思いますよ

2

追記

2016/12/02 13:58

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -54,4 +54,6 @@
54
54
 
55
55
  - CSRFコンポーネントとセキュリティコンポーネントは、原則すべてのフォームで有効にする
56
56
 
57
+ - フォームの入力値はバリデートする
58
+
57
59
  - findなどのSQLインジェクションセーフな関数を使う

1

追記

2016/12/01 22:42

投稿

popobot
popobot

スコア6586

test CHANGED
@@ -39,3 +39,19 @@
39
39
 
40
40
 
41
41
  セキュリティコンポーネントについては[マニュアル](http://book.cakephp.org/3.0/ja/controllers/components/security.html)に詳細な記載があるのでこれをよく読むといい思います。特にフォーム改ざん防止は、利用者がフォームを改ざんして不正処理することを防いでくれるので、個人的にはとても便利だと思います。
42
+
43
+
44
+
45
+ ----
46
+
47
+
48
+
49
+ ちなみに、自分は以下のようにすることが多いです。
50
+
51
+ - h()は、必要な箇所にはすべてやる
52
+
53
+ - なるべくヘルパーを使う
54
+
55
+ - CSRFコンポーネントとセキュリティコンポーネントは、原則すべてのフォームで有効にする
56
+
57
+ - findなどのSQLインジェクションセーフな関数を使う