質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

2回答

6421閲覧

自動ログイン用のCookie有効期限について

real

総合スコア51

Cookie

HTTPにおけるCookieとは、クライアントのウェブブラウザ上に保存された一時的なデータを指します。クライアント側のJavaScriptでも、サーバー側のHTTPヘッダーでもクッキーの読み書き・修正・削除が可能です。

セキュリティー

このタグは、コンピューターシステムの安全性やデータの機密性に関連したトピックの為に使われます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2017/04/13 11:33

Webサービスを開発しており、ログイン状態を保持するために、自動ログイン用のCookieを発行しています。

Cookieの中には適当なハッシュ値が入っており、アクセス時にそのハッシュ値に対応するユーザーでログインできるようになっています。

これはログイン状態を保持する一般的な方法と思いますが、ハッシュ値の有効期限について質問があります。

AmazonやYahooといった大手のサービスでは、この有効期限は数週間程度といろいろなサイトに書かれていました。

自動ログイン用のCookieを使う主な理由として、セッションIDの固定化を防ぐことが挙げられると思います。

ハッシュ値の有効期限を例えば1年のような長い期間に設定した場合、数週間の場合と比較してどの程度危険になるのでしょうか。

ほとんど差がないようなら、可能な限り長くした方が便利なはずです。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

nakasho_devさんが既に指摘されているように、一般に自動ログインの有効期間は短い方が安全だと言われているのですが、定量的にこれだけ安全になるといえるほどの違いはないと思います。
一例として、以下の2パターンで考えてみます。

A: 1週間の自動ログイン
B: 1年間の自動ログイン

クロスサイトスクリプティングなどでクッキーが奪われたとして、それが1日程度のうちに悪用されたら、AもBもそれほど違いはありません。攻撃者がクッキーを奪った後10日後に悪用した場合は、Aの場合は悪用が防げますが、攻撃者はそれほどのんびりとはしていないでしょう。

実は、自動ログインの有効期間は、「パスワードの定期的変更」と類似の状況があります。パスワードを定期的に変更するのは、パスワードに有効期間をつけることと同じだからです。
最近では、「パスワードの定期的変更にはあまり意味がないのではないか」という意見が活発に出ていますが、自動ログインの有効期間を短くすることは、「パスワードの定期的変更」とくらべても実際にはそれほど効果が期待できないように思えます。
なぜなら、パスワードは、入力中に背後から盗み見される(ショルダハック)とか、他のサイトと同じパスワードをつけてしまう(パスワードの使いまわし)という可能性があり、また漏洩したパスワードが流通しているという状況があるため、パスワードの定期的には多少は意味があります。
一方、自動ログインのための情報(トークン)には、上記のパスワードの場合の状況はあてはまりません。

このように考えてみると、「自動ログインの有効期間は短いほうが安全」ということはよく言われることではありますが、1週間と1年間とで比べた場合は、それほど差がないように思えます。
一方、自動ログインがある場合とない場合でくらべてみると、自動ログインがない場合の方が多少安全になります。それは、「クロスサイトスクリプティング攻撃を受けたが、たまたまログイン状態でなかったので被害を受けなかった」という状況はあるからです。

こうしてみると、自動ログインの有効期間が問題なのではなく、「たまたま攻撃を受けた時点でログイン状態である確率が高いか低いか」が問題です。利用頻度が低いサイトで、かつ自動ログインの有効期間が短ければ、結果として「ログインしていない確率」が高くなり、攻撃を受ける確率も低くなります。一方、利用頻度が高いサイトであれば、自動ログインの期間に関係なく「ログインしている確率」が高くなり、攻撃を受けやすくなります。

以上のことから、自動ログインの期間を長くしても安全性があまり変わらないための条件は、Google等のように「ユーザーが常にログインしている」ようなタイプのサイトであり、滅多に使わないサイトなのに自動ログインに対応すると、クロスサイトスクリプティング等の攻撃を受けやすくなることになります。滅多に使わないサイトの場合は、そもそも自動ログインに対応しない方がよいということになります。

以下、質問に対する答えではありませんが、

自動ログインに用いる乱数はトークンと呼ばれます。ハッシュ値を使うことはあまりないと思いますが、トークンを生成する際にハッシュ関数を用いる場合はあります。その場合でも自動ログイン用の情報はトークンと呼んだほうがよいと思います。

また、以下は間違いです。セッションIDの固定化と自動ログインは無関係です。

自動ログイン用のCookieを使う主な理由として、セッションIDの固定化を防ぐことが挙げられると思います。

投稿2017/04/13 22:07

ockeghem

総合スコア11701

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

real

2017/04/14 04:18

なるほど。基本的には1週間と1年間とを比べた場合はそれほど違いはないが、他のセキュリティホールと掛け合わさって危険が増す可能性がある、ということですね。 とても勉強になりました!ありがとうございます。
guest

0

セッションハイジャック対策として短いほうが良いです。

クロスサイトスクリプティング、マルウェア、パケットキャプチャなどの方法で不正にCookieを第三者に取得され、利用される可能性があります。
Cookieのみで認識している場合、それが奪われたら本人か悪意のある第三者か判別できません。

投稿2017/04/13 14:52

nakasho_dev

総合スコア2655

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問