質問するログイン新規登録

回答編集履歴

1

回答に具体例追加。

2018/06/25 03:24

投稿

nak
nak

スコア696

answer CHANGED
@@ -7,4 +7,83 @@
7
7
 
8
8
  いずれの対応方法も、公式マニュアル
9
9
  https://readouble.com/laravel/5.5/ja/csrf.html
10
- に具体的に記載されておりますので、詳しくはそちらをご覧ください。
10
+ に具体的に記載されておりますので、詳しくはそちらをご覧ください。
11
+
12
+
13
+
14
+ ---
15
+ 質問への追記
16
+ > 下記の方が言うようにCSRF対策をうまくやれば、行けると思うんですがちょっと苦労してます(泣)。
17
+
18
+ を受けて。
19
+
20
+ すみません、もしかして、こちらの問題、まだ解決されていないのでしょうか?(回答へのコメントを拝見して「わかっていなかったが、回答を見て理解した」という旨かと勘違いしておりました。失礼いたしました)
21
+
22
+ 各対応内容について、ご紹介した公式マニュアルの内容をもう少し具体的に記載します。
23
+ ※両方の対応を行う必要はありません。いずれか1つの対応を実施してください(おススメは「form中にTokenを追加する」のほうです。Laravelで「実施するべし」と定義されているCSRF対策が正しく行える実装なので)。
24
+
25
+ なお、以下の記載内容はLaravel5.5のマニュアルを元に記載しています。
26
+ バージョンが異なる場合、対応方法が異なる場合がありますので、実際に使われているLaravelのバージョン番号をお知らせください。
27
+
28
+ ####「form中にTokenを追加する」の場合
29
+ マニュアルですと、下記の部分に該当します。
30
+
31
+ ```
32
+ アプリケーションでHTMLフォームを定義する場合はいつでも、隠しCSRFトークンフィールドをフォームに埋め込み、CSRF保護ミドルウェアがリクエストの有効性をチェックできるようにしなければなりません。トークン隠しフィールドを生成するには、csrf_fieldヘルパ関数を使ってください。
33
+
34
+ <form method="POST" action="/profile">
35
+ {{ csrf_field() }}
36
+ ...
37
+ </form>
38
+ ```
39
+
40
+ 具体的に記載すると、
41
+ resources\views\helo.php
42
+
43
+ `<form method="post" action="/nitta">`
44
+ のすぐ下に、
45
+ `<?php echo csrf_field(); ?> `
46
+ という記述を追加してください(動作未検証)。
47
+
48
+
49
+ ※Bladeテンプレートを使用している場合は、ご紹介したマニュアル内の記載のとおり、
50
+ `{{ csrf_field() }}`ですが、Bladeテンプレートを使用しない場合は中かっこを使った関数呼び出し(例:`{{ hoge() }}` )ができません。
51
+ そのため、 `<?php echo hoge(); ?>` で関数を呼び出します。
52
+
53
+
54
+ ####「MiddleWareでCSRF対策を無効にする設定を行う」の場合
55
+ マニュアルですと、「URIの除外」項全体が該当します。
56
+
57
+ 具体的には、ご自身の
58
+
59
+ app\Http\Middleware
60
+ ディレクトリ(無かったら作成してください)の中に
61
+ VerifyCsrfToken.php
62
+ というファイルを作っていただき、その中に、下記の内容を記載してください。
63
+
64
+ ```php
65
+ <?php
66
+
67
+ namespace App\Http\Middleware;
68
+
69
+ use Illuminate\Foundation\Http\Middleware\VerifyCsrfToken as Middleware;
70
+
71
+ class VerifyCsrfToken extends Middleware
72
+ {
73
+ /**
74
+ * CSRFバリデーションから除外するURI
75
+ *
76
+ * @var array
77
+ */
78
+ protected $except = [
79
+ 'nitta',
80
+ 'http://(実際のドメイン)/nitta', // おそらく不要定義です('nitta'だけでうまくいくなら削除してください)
81
+ ];
82
+ }
83
+ ```
84
+
85
+
86
+ 追伸:
87
+ みなさんがおっしゃっている「blade」というのは、こちらのことです。
88
+ https://readouble.com/laravel/5.5/ja/blade.html
89
+ ご参考まで。