94650


匿名掲示板を作成中です。仕様とご相談したいことは次の通りになります。  
・イメージとしては5ちゃんねるみたいな匿名掲示板  
・ログインはなし  
・匿名だが各人にIDが振り分けられる  
・IDの管理について悩んでいる

利用者が別のページに遷移したり、しばらく経って再び訪問した際、同じPCの同じブラウザからアクセスしたことを知るために、サーバーが発行したランダムな文字列のIDをサーバーのDBに保存し、利用者に発行する仕組みを作りました。利用者側からクッキーに保存されているこのIDをサーバーに送り、サーバーのDBのレコードと照合して同一人物であることを確認します。ここで長らく悩んでいるのはこのIDを利用者のブラウザのクッキーに保存することは危険ではないか、ということです（そのように書かかれているブログが散見されますし）。かといってブラウザのどこかにIDを保存しておかないと同一人物であることはわからないですよね（？）。

IDをクッキーに保存しないでセッションIDとしてJSON Web
Token(JWT)をクッキーに保存する方法もあるようですが、JWT自体を他人に知られてしまえば、それを自分のPCのクッキーに設定すればなりすましができそうに思います。

クッキー自体見られたら諦めるしかないのか、ということでもなさそうな気がします。根本的なところから間違っているからも知れませんが、ヒントでもよいのでご教示いただければ幸いです。


CC BY-SA 4.0
2023-04-26T02:15:41.050
94647
2023-04-28T11:27:00.447
2023-04-28T11:27:00.447
7291
57387
question
javascript node.js http security
匿名掲示板のIDをクッキーに保存するのは危険ですか？


何に不安を感じているのか分かりませんが・・・

匿名アクセスを許さずユーザー認証が必要なサイトでも、認証チケットをクッキーに入れて HTTPS 通信でやり取りするというのはごく普通に行われていることです。

また、例えば、ネット通販サイトで最初は匿名アクセスしてカートに商品を入れ、決済する時にログインするということができるサイトで、ログイン前は匿名ユーザー用クッキーを使ってユーザーの識別を行うこともあります。

ということで、匿名ユーザーの識別用にクッキーを使うことに「根本的なところから間違っている」ということはないと思います。


CC BY-SA 4.0
2023-04-26T05:05:15.997
94650
2023-04-26T05:05:15.997
51338
94647
answer


なりすましが起こるかどうかというよりもなりすましが起きたときにどうなるかも重要な視点です。  
セッションIDをクッキーの形にして用いる場合、改めてログインすれば以前のセッションIDは無効になります。 (無効にします。)  
仮にクッキーが盗まれても一時的にしか使えないのです。  
セッションIDからIDやパスワードを推測しやすい構成になっていない限り問題は小さく抑えられます。

個人に紐づいたID自体がクッキーとして保存されていてそれが盗まれた場合にはサービスの管理者が対処しない限りなりすましっぱなしです。  
そういう意味では危険と言えるでしょうね。


CC BY-SA 4.0
2023-04-26T11:24:00.347
94654
2023-04-26T11:24:00.347
3364
94647
answer


なりすましを防止したいなら、ユーザーIDをCookieに保存するのは危険です。  
ユーザーIDを盗聴されたり改ざんすることで、なりすましが可能です。  
TLSを使うか否かで対処方法は変わりますが、どちらにしてもユーザーIDの真正性の確保が必要です。

  * [セッションハイジャック](https://ja.wikipedia.org/wiki/%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%83%8F%E3%82%A4%E3%82%B8%E3%83%A3%E3%83%83%E3%82%AF#HTTP%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3)
  * [安全なウェブサイトの作り方 - 1.4 セッション管理の不備](https://www.ipa.go.jp/security/vuln/websecurity/session-management.html)


CC BY-SA 4.0
2023-04-26T12:55:56.417
94655
2023-04-26T12:55:56.417
7291
94647
answer