web-dev-qa-db-ja.com

セッション設定は十分に安全ですか?

ファイルのホスティングおよび共有Webアプリケーションを開発しています。

次のPHPセッション設定は十分に安全ですか?

ini_set('session.cookie_httponly', 1);
ini_set('session.cookie_lifetime', 0); 
ini_set('session.entropy_file', '/dev/urandom');
ini_set('session.hash_function', 'whirlpool'); //is whirlpool that necessary?
ini_set('session.use_only_cookies', 1);
ini_set('session.hash_bits_per_character', 5);
ini_set('session.cookie_secure', 1);

session_name('sid');

session_start();

if (!isset($_COOKIE['sid'])) {
    $_SESSION['token'] = CryptoCharGen::alnum(); //20 chars
}

セキュリティに追加するには:

  • フォーム検証のために、暗号的に強力なCSRFトークンをユーザーセッションに結び付けます。
  • ログインおよびログアウト時に新しいセッションIDを再生成し、古いセッションを破棄します。
  • anyフォームの送信が成功したときに新しいCSRFトークンを再生成します。

デフォルトのPHPセッション名を名前変更するために読んだので、代わりにsidという名前を付けました。それで十分ですか?

自分のジェネレータでセッションIDを生成する必要がありますか? (CryptoCharGen)

セッション変数に名前を付ける方法を気にする必要がありますか?

7
Kid Diamond

session.entropy_length = 512session.use_trans_sid = 0を追加することもできます。

また、次のことも忘れないでください。

  1. httpsを使用
  2. regenerate session id ユーザー権限を変更した場合。
  3. セッションがタイムアウトします。時間はアプリによって異なります。

セキュリティとは関係ありませんが、session.hash_bits_per_characterを6に変更しないでください。数値が大きいほど、サーバーとの間で送信される文字列は短くなります。

7
Salvador Dali

以下は、セッションを安全にするための追加の手順です。

  1. 受け入れられた短時間のセッションの有効性を制限する
  2. SSL/TLSで常にセッションIDを送信する
  3. URLでセッションIDを送信しない(postメソッドを使用)
  4. 強力なCSRFトークンを作成し、CSRFトークンが検証されていることを確認します。

あなたはもっと見つけることができます

1
Kasun