だいこんの日々2

軸足をtwitterとfacebookに移しつつも、技術的な話はここに書いていきます。

session_regenerate_id

PHPはセッション固定攻撃に弱い。対策の一つとしてsession_regenerate_idという関数を使う方法がある。

Ethnaでsession_regenerate_idを使うと、セッションIDが短くなってしまうため、セッションハイジャックに弱くなってしまう。ということでEthna用の関数。

/**
  * セッションIDの変更
  *
  * @access public
  */
function session_regenerate_id()
{
    $ctl = Ethna_Controller::getInstance();
    $session =& $ctl->getSession();

    $QQ = serialize($_SESSION);
    $session->destroy();
    $session->start();
    $_SESSION = unserialize($QQ);
}

やっていることは単純で、セッション変数を待避、Ethnaでセッションを破棄&作成、待避したセッション変数を戻すだけ。あとは使う場所を間違えないこと。