質問: teratailの質問投稿ページでもそうですが、webサイトのインプットするページは、開いてから時間が経ってから送信ボタンを押すと、「ページの有効期限が切れています」となります。 これの意義は、どのような所にあるのでしょうか。 ネットで調べると、「不正な注文などを防ぐ」ため等とありますが、長時間開くことが、どのようにして不正な注文に使われ得るのでしょうか。 開きっぱなしにして離席している間に、誰かが勝手にそのPCで入力するリスクのことなのでしょうか。 私も投稿ページがあるサイトを作成しているので、その機能をつけるべきなのか考えたいです。 お分かりの方、よろしくお願いします。
回答: 私としては、2つあるかなと思っております。 まず1点目がセキュリティの観点です。 > > ネットで調べると、「不正な注文などを防ぐ」ため等とありますが、長時間開くことが、どのようにして不正な注文に使われ得るのでしょうか。 > > 開きっぱなしにして離席している間に、誰かが勝手にそのPCで入力するリスクのことなのでしょうか。 > > > もちろん、誰かが勝手にPCを使うということも考えられますが、現実としてはほぼ無い気がします。 職場でそんなことしてたら、誰かが止める気がします。 まぁ無くは無いでしょう。 このケースよりも、漏洩時のリスクが大きいと思います。 ブラウザとサーバーはCookieとセッションにより、ユーザの状態を管理しています。 サーバが発行したセッションIDをブラウザはCookieに保持します。 再度リクエストがあった場合、ブラウザから送られてきたCookieに保持しているセッションIDを見て、 サーバでは、ユーザの識別を行っています。 つまり、セッションIDさえ分かり、Cookieにセットしてリクエストを送れれば、 誰でも、任意のユーザになれるということです。 このセッションIDが消されること無く、永遠に残り続けるようにしていた場合、 何らかの事情により、セッションIDが外部に漏洩してしまったら、 アマゾンなどのショッピングサイトならば、任意のユーザで買いたい放題です。 別に同じ職場にいる必要も無く、買いたい放題です。 なので、なるべく短い期間でユーザの利便性を損なわない程度のセッション時間を設定することが必要だと思います。 まぁセッションIDというよりは、ワンタイムトークンとかで、セッションIDよりも有効期限が短い 管理値を使用すると思いますけど。 そして現実的に無限にセッションIDをサーバで保持しておけないというものあるでしょう。 セッションIDはサーバの実装にもよると思いますが、メモリ上で管理されていると思います。 様々なユーザのセッションIDをメモリ上に永遠に保持しようとしたら、メモリの無駄遣いになるだろうなと。 ものすごい数のセッションIDをメモリ上に持っておかないといけません。 なので、その観点も現実問題として必要あるかなーと思っております。