nakasho_devさんが既に指摘されているように、一般に自動ログインの有効期間は短い方が安全だと言われているのですが、定量的にこれだけ安全になるといえるほどの違いはないと思います。
一例として、以下の2パターンで考えてみます。
A: 1週間の自動ログイン
B: 1年間の自動ログイン
クロスサイトスクリプティングなどでクッキーが奪われたとして、それが1日程度のうちに悪用されたら、AもBもそれほど違いはありません。攻撃者がクッキーを奪った後10日後に悪用した場合は、Aの場合は悪用が防げますが、攻撃者はそれほどのんびりとはしていないでしょう。
実は、自動ログインの有効期間は、「パスワードの定期的変更」と類似の状況があります。パスワードを定期的に変更するのは、パスワードに有効期間をつけることと同じだからです。
最近では、「パスワードの定期的変更にはあまり意味がないのではないか」という意見が活発に出ていますが、自動ログインの有効期間を短くすることは、「パスワードの定期的変更」とくらべても実際にはそれほど効果が期待できないように思えます。
なぜなら、パスワードは、入力中に背後から盗み見される(ショルダハック)とか、他のサイトと同じパスワードをつけてしまう(パスワードの使いまわし)という可能性があり、また漏洩したパスワードが流通しているという状況があるため、パスワードの定期的には多少は意味があります。
一方、自動ログインのための情報(トークン)には、上記のパスワードの場合の状況はあてはまりません。
このように考えてみると、「自動ログインの有効期間は短いほうが安全」ということはよく言われることではありますが、1週間と1年間とで比べた場合は、それほど差がないように思えます。
一方、自動ログインがある場合とない場合でくらべてみると、自動ログインがない場合の方が多少安全になります。それは、「クロスサイトスクリプティング攻撃を受けたが、たまたまログイン状態でなかったので被害を受けなかった」という状況はあるからです。
こうしてみると、自動ログインの有効期間が問題なのではなく、「たまたま攻撃を受けた時点でログイン状態である確率が高いか低いか」が問題です。利用頻度が低いサイトで、かつ自動ログインの有効期間が短ければ、結果として「ログインしていない確率」が高くなり、攻撃を受ける確率も低くなります。一方、利用頻度が高いサイトであれば、自動ログインの期間に関係なく「ログインしている確率」が高くなり、攻撃を受けやすくなります。
以上のことから、自動ログインの期間を長くしても安全性があまり変わらないための条件は、Google等のように「ユーザーが常にログインしている」ようなタイプのサイトであり、滅多に使わないサイトなのに自動ログインに対応すると、クロスサイトスクリプティング等の攻撃を受けやすくなることになります。滅多に使わないサイトの場合は、そもそも自動ログインに対応しない方がよいということになります。
以下、質問に対する答えではありませんが、
自動ログインに用いる乱数はトークンと呼ばれます。ハッシュ値を使うことはあまりないと思いますが、トークンを生成する際にハッシュ関数を用いる場合はあります。その場合でも自動ログイン用の情報はトークンと呼んだほうがよいと思います。
また、以下は間違いです。セッションIDの固定化と自動ログインは無関係です。
自動ログイン用のCookieを使う主な理由として、セッションIDの固定化を防ぐことが挙げられると思います。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/14 04:18