3

文字を 280 回ループするループstringを使用せずに、PHP で長い (たとえば 280 文字) ランダムを生成する方法を知っている人はいますか? forカスタム セッション ID を作成するために必要です。

私の意見では、PHPSESSID は短すぎてランダムすぎないため、十分に安全ではありません。私は Facebook と Twitter を知っており、長いセッション ID (それぞれ 150 文字と 550 文字) を使用しています。

MD5、host、User-Agentなどの文字列またはBcrypt異なる文字列の暗号化を使用するオプションがある可能性がありますがPHPSESSID、これが正しい方法であるかどうかはわかりません。

4

4 に答える 4

11

そのような質問をしている場合は、おそらく、暗号化やセキュリティについて何も知らないことを意味します. あなたが言うように、「PHPSESSIDは十分に安全ではない」という理由で「長いランダム文字列」を生成しようとすると、おそらくカスタムで安全でない実装につながるでしょう。

ランダムな文字列を生成することはIMPOSSIBLEです。少なくとも現在のハードウェアではそうではありません。公正な疑似乱数ジェネレーターを近似することはできますが、これは教育目的でのみ役立ちます。

PHP のセッション ID 生成アルゴリズムはかなり効率的です。十分に安全ではないと思うなら、それを改善するために時間を浪費することになるでしょう。最大限のセキュリティを検討している場合 (たとえば、クライアント証明書を使用する場合) は、おそらく別の認証メカニズムを使用することをお勧めします。

Twitter、Facebook、または同様のトラフィックを持つ別のサイトなどの Web サイトがより長いセッション ID を使用している場合、それは (ある意味では) より安全だからではなく、競合を回避するためである可能性があります。

最後に、独自のアルゴリズムを作成せずに長いセッション ID が必要な場合は、次の PHP 構成ディレクティブを使用する必要があります。

session.hash_functionこれは、PHP で知られている任意のハッシュ アルゴリズムを使用できます。

session.bits_per_characters文字列を短くしたり長くしたりするために使用することもできます。これを行うと、文字列が長くなったり短くなったりする可能性がありますが、データは同じままであることに注意してください。表現が異なるだけです (基数 16、基数 32 など)。

追加情報:

カスタム ソース (ファイル) を使用してシードの長さを設定することで、エントロピーを増やすこともできます。

ini_set("session.hash_function", "sha512");
ini_set("session.bits_per_charater", 4); // 4 means hex
ini_set("session.entropy_file", "/dev/urandom");
ini_set("session.entropy_length", "512");
于 2012-10-14T19:01:21.860 に答える
5

2進数の16進数にすることはできますか?

bin2hex(mcrypt_create_iv(140, MCRYPT_DEV_URANDOM));

または、次の場所にアクセスできる場合hash_pbkdf2()

hash_pbkdf2('sha256', PHPSESSID, mt_rand(), 1, 280, false);
于 2012-10-14T18:49:28.103 に答える
4

おそらく、「長い」セッション ID のすべてのビットが純粋にランダムであるとは限らないことに気付くでしょう。これらのビットは、重要な情報を迅速に抽出できるようにするためにアプリケーションに追加情報を提供する可能性があります。

デフォルトの PHP セッション ID はそれほど悪くなく、追加のエントロピーを提供することで改善できます (例: /dev/urandom から)

PHP ソースのext/session/session.cにあるphp_session_create_id を見てください。

こんなふうになります:

そのため、セッション ID の重複を取得したり予測したりすることは非常に困難です。

于 2012-10-14T19:00:41.823 に答える
-2

自分で長い紐を作り、シャッフルします。

$string = 'asdfhdfiadfshsdfDSGFADSFDSFDSFER524353452345';
$new_string = shuffle($string);
于 2012-10-14T18:46:21.523 に答える