2014.07.24 システム
PHPのセッションIDのアルゴリズム設定について
システムエンジニアの大貫です。
前回、「SSL証明書の暗号化アルゴリズム」について、スタッフブログを記載いたしましたが、
今回は、「PHPのセッションIDのアルゴリズム」について、記載したいと思います。
ログイン認証が必要な会員系のサイトや、入力データを保持したい場合などで、セッションを使用するかと思いますが、安易にセッションを使用すると脆弱の元となったりもします。
セッション関連の脆弱といえば、「セッション・ハイジャック」、「セッション・リプレイ」、「セッション・フィクセーション」、「クロスサイト・リクエスト・フォージェリ」などがあります。
それぞれの脆弱がどのようなものかは後述するとして、今回は「セッション・ハイジャック」について、触れたいと思います。
「セッション・ハイジャック」とは名前の通り、セッションを乗っ取られることで、例えば、自分がログインしている状態で、利用しているセッションIDを他人に盗まれた場合、その人になりすまして、サイトにアクセスできてしまうというもので、サイトに登録してある個人情報などを盗まれたり、改ざんされたり、勝手に商品の購入をされたりとサイトの特性によって様々な被害が出る可能性があります。
「セッション・ハイジャック」の主な攻撃方法は、「セッションIDの推測」や、「有効なセッションIDを総当りで確認」するという方法があります。
これを回避するためには、単純なセッションIDは付けないのはもちろんのこと、「推測しにくいセッションIDを生成」するロジックを使用する必要があります。
PHPを初期設定の状態で、セッションを使用すると、セッションIDは、「MD5」のアルゴリズムを使用して生成されます。
MD5は、「128bit」のハッシュ値を生成することが出来ますが、セキュリティ的には心もとないので、セッションを使用するのであれば、「PHP.ini」の設定を見なおす必要があります!
セッションID生成のアルゴリズムを設定するには、「PHP.ini」の「session.hash_function = 0」と記載されている部分を、変更する必要があります。
以下が設定例ですが、使用されているPHPのバージョンが、「PHP5.3.0以降」であれば、「SHA512」を設定することをオススメ致します。
(PHPのバージョンが「PHP5.3.0より前」であれば、最低でも「SHA1」の設定をするようにして下さい。)
【セッションID生成アルゴリズムの設定方法】
▼MD5(128bit)
session.hash_function = 0
▼SHA1(160bit)
session.hash_function = 1
▼SHA256(256bit)※PHP5.3.0以降のみ
session.hash_function = sha256
▼SHA512(512bit)※PHP5.3.0以降のみ
session.hash_function = sha512