回答編集履歴
7
追記&訂正
answer
CHANGED
@@ -28,7 +28,7 @@
|
|
28
28
|
|
29
29
|
**ログイン有り**
|
30
30
|
|
31
|
-
CSRF 対策トークンのクッキーは上と同じものです(ブラウザを閉じない限り同じクッキーが送信されます)。ログインした際に認証クッキーを受け取って
|
31
|
+
CSRF 対策トークンのクッキーは上と同じものです(ブラウザを閉じない限り同じクッキーが送信されます)。ログインした際に認証クッキーを受け取っていますので、POST 操作で両方送信されています。
|
32
32
|
|
33
33
|

|
34
34
|
|
6
追記
answer
CHANGED
@@ -12,4 +12,28 @@
|
|
12
12
|
|
13
13
|
ただし、フォームデータを POST するのではなく、例えば、AJAX で JSON 文字列を POST するような場合は (hidden は送れない場合は)、リクエストヘッダを使う方法も用意されているそうです。詳しくは以下の記事を見てください。
|
14
14
|
|
15
|
-
[https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax](https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax)
|
15
|
+
[https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax](https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax)
|
16
|
+
|
17
|
+
**【追記】**
|
18
|
+
|
19
|
+
下の 2021/06/09 15:19 の私のコメントで「ご参考に、あとで、ログイン有り無しの時のクッキーがどうなっているか Fiddler で見た画像を回答欄に貼っておきます」と書いた件です。
|
20
|
+
|
21
|
+
編集画面で編集したあと結果を POST した場面です。__RequestVerificationToken が CSRF 対策トークンのクッキー、.AspNet.ApplicationCookie は認証クッキーです。
|
22
|
+
|
23
|
+
**ログイン無し**
|
24
|
+
|
25
|
+
ログインしてなくとも CSRF 対策トークンのクッキーは編集画面が表示された際に受け取っていますので、POST すると送信されます。
|
26
|
+
|
27
|
+

|
28
|
+
|
29
|
+
**ログイン有り**
|
30
|
+
|
31
|
+
CSRF 対策トークンのクッキーは上と同じものです(ブラウザを閉じない限り同じクッキーが送信されます)。ログインした際に認証クッキーを受け取ってうますので、POST 操作で両方送信されています。
|
32
|
+
|
33
|
+

|
34
|
+
|
35
|
+
**hidden のトークン**
|
36
|
+
|
37
|
+
ちなみに、hidden 要素のトークンは以下の画像の通りです。クッキーの CSRF 対策トークンと異なるのは追加情報が含まれているからです。
|
38
|
+
|
39
|
+

|
5
追記
answer
CHANGED
@@ -10,6 +10,6 @@
|
|
10
10
|
|
11
11
|
理由は、それを書いてある Mictosoft のドキュメントは見つけられなかったので不明ですが、普通に考えてサーバーがランダムに生成したトークンをリクエストヘッダに含めるのは無理があるからだと思います。
|
12
12
|
|
13
|
-
ただし、フォームデータを POST するのではなく、例えば、AJAX で JSON 文字列を POST するような場合は、リクエストヘッダを使う方法も用意されているそうです。詳しくは以下の記事を見てください。
|
13
|
+
ただし、フォームデータを POST するのではなく、例えば、AJAX で JSON 文字列を POST するような場合は (hidden は送れない場合は)、リクエストヘッダを使う方法も用意されているそうです。詳しくは以下の記事を見てください。
|
14
14
|
|
15
15
|
[https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax](https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax)
|
4
追記
answer
CHANGED
@@ -8,4 +8,8 @@
|
|
8
8
|
|
9
9
|
hidden です。
|
10
10
|
|
11
|
-
理由は、それを書いてある Mictosoft のドキュメントは見つけられなかったので不明ですが、普通に考えてサーバーがランダムに生成したトークンをリクエストヘッダに含めるのは無理があるからだと思います。
|
11
|
+
理由は、それを書いてある Mictosoft のドキュメントは見つけられなかったので不明ですが、普通に考えてサーバーがランダムに生成したトークンをリクエストヘッダに含めるのは無理があるからだと思います。
|
12
|
+
|
13
|
+
ただし、フォームデータを POST するのではなく、例えば、AJAX で JSON 文字列を POST するような場合は、リクエストヘッダを使う方法も用意されているそうです。詳しくは以下の記事を見てください。
|
14
|
+
|
15
|
+
[https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax](https://docs.microsoft.com/ja-jp/aspnet/web-api/overview/security/preventing-cross-site-request-forgery-csrf-attacks#anti-csrf-and-ajax)
|
3
追記
answer
CHANGED
@@ -6,4 +6,6 @@
|
|
6
6
|
|
7
7
|
> 2、②でのhiddenもしくは、リクエストヘッダーのどちらにトークンを付与するのが一般的ですか?また理由も教えていただけると助かります。
|
8
8
|
|
9
|
+
hidden です。
|
10
|
+
|
9
|
-
|
11
|
+
理由は、それを書いてある Mictosoft のドキュメントは見つけられなかったので不明ですが、普通に考えてサーバーがランダムに生成したトークンをリクエストヘッダに含めるのは無理があるからだと思います。
|
2
訂正
answer
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
> 1、ユーザーの新規作成時(つまりログイン前)はクッキーにトークン値がないので、この場合は一般的にどのような実装になっているのでしょうか?
|
4
4
|
|
5
|
-
トー
|
5
|
+
トークンはランダムに生成されます。なので、ログインしているか否かに関係なくトークンは発行されます。
|
6
6
|
|
7
7
|
> 2、②でのhiddenもしくは、リクエストヘッダーのどちらにトークンを付与するのが一般的ですか?また理由も教えていただけると助かります。
|
8
8
|
|
1
脱字訂正
answer
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
ASP.NET MVC の場合も質問者さんが書かれた機能がフレームワークに組み込まれていて、質問 1, 2 はどうなっているかと言う
|
1
|
+
ASP.NET MVC の場合も質問者さんが書かれた機能がフレームワークに組み込まれていて、質問 1, 2 はどうなっているかと言うと、
|
2
2
|
|
3
3
|
> 1、ユーザーの新規作成時(つまりログイン前)はクッキーにトークン値がないので、この場合は一般的にどのような実装になっているのでしょうか?
|
4
4
|
|