Session Fixation 脆弱性の修正パッチ
2007-03-06
ZenCart日本語公式サイトで
* v1.3.0.2-l10n-jp-1用
* v1.2-l10n-jp-6用
のSession Fixation 脆弱性に対するパッチがリリースされました。
ダウンロードは、こちら
v1.3.0.2-l10n-jp-1用
オーバーライド対応で、コアファイルを修正する必要はないので (もちろんオーバーライドされるファイルに手を加えている場合は修正が必要ですが) raadmeに記載されている通りに作業をすれば簡単に導入することができます。v1.2-l10n-jp-6用
v1.2-l10n-jp-6用の場合は、コアファイルを修正する必要があります。 patchコマンドが使える環境用にパッチファイルが同梱されてますが、 ここでは、patchコマンドが使えない環境の方向けに、 session_fixation.patchの中身(変更前と変更後)を紹介します。Step 1
--------------- admin/includes/application_top.php 20行目付近 // Start the clock for the page parse time log
define('PAGE_PARSE_START_TIME', microtime());
↓
ini_set("session.use_only_cookies", "1");
ini_set("session.use_cookies", "1");
ini_set("session.use_trans_sid", "0");
// Start the clock for the page parse time log
define('PAGE_PARSE_START_TIME', microtime());
admin/includes/functions/sessions.php 90行目付近
function zen_session_start() {
return session_start();
}
↓
function zen_session_start() {
$result = session_start();
if (!isset($_SESSION['initiated'])) {
session_regenerate_id();
$_SESSION['initiated'] = true;
}
return $result;
}
includes/application_top.php 100行目付近
// Load the database dependant query defines
if (file_exists(DIR_WS_CLASSES . 'db/' . DB_TYPE . '/define_queries.php')) {
include(DIR_WS_CLASSES . 'db/' . DB_TYPE . '/define_queries.php');
}
↓
// force cookie
if (SESSION_ALWAYS_FORCE_COOKIE == "True") {
ini_set("session.use_only_cookies", "1");
ini_set("session.use_cookies", "1");
ini_set("session.use_trans_sid", "0");
}
// Load the database dependant query defines
if (file_exists(DIR_WS_CLASSES . 'db/' . DB_TYPE . '/define_queries.php')) {
include(DIR_WS_CLASSES . 'db/' . DB_TYPE . '/define_queries.php');
}
includes/functions/sessions.php 110行目付近
function zen_session_start() {
if (defined('DIR_WS_ADMIN')) {
ini_set('session.gc_maxlifetime', (SESSION_TIMEOUT_ADMIN < 900 ? (SESSION_TIMEOUT_ADMIN + 900) : SESSION_TIMEOUT_ADMIN));
}
return session_start();
}
↓
function zen_session_start() {
if (defined('DIR_WS_ADMIN')) {
ini_set('session.gc_maxlifetime', (SESSION_TIMEOUT_ADMIN < 900 ? (SESSION_TIMEOUT_ADMIN + 900) : SESSION_TIMEOUT_ADMIN));
}
$result = session_start();
if (!isset($_SESSION['initiated'])) {
session_regenerate_id();
$_SESSION['initiated'] = true;
}
return $result;
}