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

回答編集履歴

7

追記&訂正

2021/06/09 06:45

投稿

退会済みユーザー
answer CHANGED
@@ -28,7 +28,7 @@
28
28
 
29
29
  **ログイン有り**
30
30
 
31
- CSRF 対策トークンのクッキーは上と同じものです(ブラウザを閉じない限り同じクッキーが送信されます)。ログインした際に認証クッキーを受け取ってますので、POST 操作で両方送信されています。
31
+ CSRF 対策トークンのクッキーは上と同じものです(ブラウザを閉じない限り同じクッキーが送信されます)。ログインした際に認証クッキーを受け取ってますので、POST 操作で両方送信されています。
32
32
 
33
33
  ![イメージ説明](e876d01eef932f86a0b712620dbdc073.jpeg)
34
34
 

6

追記

2021/06/09 06:44

投稿

退会済みユーザー
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
+ ![イメージ説明](7d5e5c41733584aa4de08b9f4fe7e196.jpeg)
28
+
29
+ **ログイン有り**
30
+
31
+ CSRF 対策トークンのクッキーは上と同じものです(ブラウザを閉じない限り同じクッキーが送信されます)。ログインした際に認証クッキーを受け取ってうますので、POST 操作で両方送信されています。
32
+
33
+ ![イメージ説明](e876d01eef932f86a0b712620dbdc073.jpeg)
34
+
35
+ **hidden のトークン**
36
+
37
+ ちなみに、hidden 要素のトークンは以下の画像の通りです。クッキーの CSRF 対策トークンと異なるのは追加情報が含まれているからです。
38
+
39
+ ![イメージ説明](047c3bf3fa3053abdf5ce9792bb82c95.jpeg)

5

追記

2021/06/09 06:39

投稿

退会済みユーザー
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

追記

2021/06/07 23:08

投稿

退会済みユーザー
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

追記

2021/06/07 23:06

投稿

退会済みユーザー
answer CHANGED
@@ -6,4 +6,6 @@
6
6
 
7
7
  > 2、②でのhiddenもしくは、リクエストヘッダーのどちらにトークンを付与するのが一般的ですか?また理由も教えていただけると助かります。
8
8
 
9
+ hidden です。
10
+
9
- hidden です。理由は、それを書いてある Mictosoft のドキュメントは見つけられなかったので不明ですが。
11
+ 理由は、それを書いてある Mictosoft のドキュメントは見つけられなかったので不明ですが、普通に考えてサーバーがランダムに生成したトークンをリクエストヘッダに含めるのは無理があるからだと思います

2

訂正

2021/06/07 22:54

投稿

退会済みユーザー
answer CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  > 1、ユーザーの新規作成時(つまりログイン前)はクッキーにトークン値がないので、この場合は一般的にどのような実装になっているのでしょうか?
4
4
 
5
- トーキンはユーザー情報に関係なくトークンはランダムに生成ます。なので、ログインしているか否かに関係なくトークンは発行されます。
5
+ トークンはランダムに生成されます。なので、ログインしているか否かに関係なくトークンは発行されます。
6
6
 
7
7
  > 2、②でのhiddenもしくは、リクエストヘッダーのどちらにトークンを付与するのが一般的ですか?また理由も教えていただけると助かります。
8
8
 

1

脱字訂正

2021/06/07 22:50

投稿

退会済みユーザー
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