2010-02-12
生年月日入力時「1969年」が正しく処理されない不具合に関する対応
会員登録時並びに顧客管理画面において、生年月日項目で1969年が正しく登録されない不具合に対して修正ファイルを準備致しました。
対象: Zen Cart Pro シリーズ各バージョン、 Zencart1.3.8a
2009-11-30
XSS攻撃に対する脆弱性に対する対応
XSSやCSRFによる攻撃の可能性を低減するために、以下の修正を行う事を推奨いたします。
対象: Zen Cart Pro シリーズ各バージョン、 Zencart1.3.8a (およびすべてのバージョンのZencart )
/admin/index.php
127行目近辺の該当箇所に対して、赤文字で記載している2行を追加します:
while (!$customers->EOF) {
$customers->fields['customers_firstname'] = zen_output_string_protected($customers->fields['customers_firstname']);
$customers->fields['customers_lastname'] = zen_output_string_protected($customers->fields['customers_lastname']);
echo ' <div class="row"><span class="left"><a href="' . zen_href_link(FILENAME_CUSTOMERS ....(code snipped here for brevity)......../admin/customers.php
1244行目近辺の該当箇所に、赤文字で記載している2行を追加します:
default:
if (isset($cInfo) && is_object($cInfo)) {
if (isset($_GET['search'])) $_GET['search'] = zen_output_string_protected($_GET['search']);
$customers_orders = $db->Execute("select o.orders_id, o.date_purchased, o.order_total, o.currency, o.currency_value,/admin/sqlpatch.php (ZenCartPro シリーズと1.3.8aのみ)
809行目近辺の該当行に対して、赤文字で "(bool)" と記載している部分を追加します:
<?php if (isset($_GET['nogrants'])) echo '<input type="hidden" id="nogrants" name="nogrants" value="'.(bool)$_GET['nogrants'].'" />'; ?>
※ ZenCartPro シリーズ利用者の方はモジュールサイトより修正パッチをダウンロードしていただくことが出来ます。
2009-09-24
IE8.0 で発生する文字サイズ変更の挙動について(参考情報)
IE8での閲覧時に文字サイズが勝手に変更されるという奇妙な挙動が確認されています。
恐らくはIE8日本語版のバグだと考えられるのですが、特定の(おそらくはデフォルトの設定)フォントを利用している場合にマウスオンなどの動作に連動して文字の大きさが勝手に変更されてしまうようです。
ユーザー側がIEの設定でWEBブラウズ時のフォントを変更するなどして対応する事は可能なのですが、ユーザーに対応してもらうのは非現実的でもあり、取り急ぎは以下のような対応で回避する事が出来るでしょう。
現状では正式な対応方針が決定しておりませんので、配布するプログラムへの修正は行っておりません。
まずは、情報の共有というレベルですが対応方法の一つをお知らせいたします。
/includes/templates/利用中のテンプレート/common/html_header.php
の<head>~</head>の間に以下の行を追加してください。
<?php if (ereg('MSIE 8.0', $_SERVER['HTTP_USER_AGENT'])) echo
'<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />';
?>
※phpタグですので追加位置に注意してください。
<meta name="description" content="<?php echo META_TAG_DESCRIPTION; ?>" />
の下辺りが安全かもしれません
***********************************
<meta name="description" content="<?php echo META_TAG_DESCRIPTION; ?>" />
<?php if (ereg('MSIE 8.0', $_SERVER['HTTP_USER_AGENT'])) echo
'<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />';
?>
<meta http-equiv="imagetoolbar" content="no" />
のような記述になると思います。もしIE8以外でもメタ情報として出てもいいのなら
<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />
を<head>~</head>の間に追加するだけで大丈夫です。
バグであればIEで修正が行われるでしょう。 実際に問題が発生していて気になるようであれば上記対応を参考になさってください。
2009-07-24
htmlarea の不具合に関する対応
ZenCartPro (zencart各バージョン)に採用されているHTMLエディタ 「 htmlarea 」の修正されていない不具合に対して独自の対応をいたしました。
対象: Zen Cart Pro シリーズ各バージョン、 Zencart1.3.8a
現象:
管理画面より htmlarea を有効にした状態で編集画面を開いた場合、相対パスで指定された参照先に対して自動的に管理画面までのURLを追加し、そのまま保存すると変更された内容でデータが上書きされる。
この現象は InternetExplore(及びIE系ブラウザ)を利用した場合にのみ発生し、FireFox などでは発生しません。
セキュリティアップのために「管理画面のURLを隠す」という流れに反するものですので、強引な方法ではありますが対応する事に致しました。 詳細は修正ファイル内の readme をご覧ください。
2009-07-14
画像ディレクトリ(/images)に見知らぬPHPファイルがあります!・・・
zencart 新・旧各バージョンをご利用の方から上記のようなお問合せが数件弊社に寄せられています。
6月の後半ごろから日本国内でも、Zencart の管理画面の脆弱性を狙って悪意のあるファイルをZencart のあるサーバー上にアップされてしまうケースが複数報告されています。
ZenCartProシリーズ、zencart1.3.8a をご利用の方には既にメールにてお知らせをお送りしているとおり、同様の脆弱性が存在しています。>> 2009-06-24 管理画面の脆弱性に対するセキュリティパッチ
※ 管理者用ディレクトリ名をデフォルトの /admin のままでお使いの方は特に要注意です。
まだ、2009-06-24 「管理画面の脆弱性に対するセキュリティパッチ」 と、/admin ディレクトリ名の変更を適用していない場合には、すぐに適用を行うと共に、発見された不審なファイルを全て削除してください。
※ パミッションが 777 になっているディレクトリは /images 以外でも全て攻撃対象となります。 ご自身の Zencart サイトにおいても、パミッション 777 のディレクトリがある場合には、見知らぬ PHP ファイルや、.htaccess ファイル また、拡張子の無いファイルなどが存在しないかチェックしてみてください。
同様に書き込み権限のあるファイル類 includes/languages/言語名/html_include/ 内の定番ページの編集ファイルなどにも、スクリプトが追記されているかもしれません。
パミッションの設定を777以外にする事や、777 にせざるを得ない場合には何らかの制御を加える必要があるでしょう。 「パミッション設定を含めたセキュリティについての追加情報」
※ 2007-07-15 追記
この記事の掲載により、「/images ディレクトリ内などに不審なファイルが無い場合、被害にあっていないと判断してよいのか?」と質問されるケースがありましたが、必ずしもそうとは言えません。
ここに掲載しているのは、「脆弱性を利用したアタックの一例」としての「分かりやすい痕跡」のパタンにすぎません。
既にファイルが置かれたり改変されてしまった場合には、セキュリティパッチの適用以外にも行うべき作業があるため、別途詳しく解説いたしました。
今回の脆弱性を利用すれば、ファイルのアップロードや改変以外にも悪用方法はありますので、すべてのユーザーは急いで対応するようにして下さい。
2009-07-06
セキュリティのためにビッグマウスの推奨する修正
Zencart デフォルトでは、管理画面からは画像ファイル以外のアップロードも可能となっています。
しかしながら、もしもの場合に備えて管理画面からのファイルアップロードの際に、画像ファイル以外はアップロード出来ないようにしておく事を推奨いたします。
対象: Zen Cart Pro シリーズ各バージョン、 Zencart1.3.8a
2009-06-30
面倒なアタックによるリソース消費を軽減する修正
セキュリティが守られていても、アタック自体でサーバーのリソースが取られたりするのもできるだけ避けたいものです。 以下に対応方法を記載します。
関連記事>>「アタックによる無駄な負荷を軽減するための修正」
2009-06-30
「管理画面でのセキュリティ上の問題点」関連追加情報・・・「もしハッキングされてしまったら」
「セキュリティについて」のページに記事を追加しましたのでご確認ください。
関連記事>>「サイトがハッキングされたようです! どうしたらよいですか?」
2009-06-28
低度のセキュリティ上の問題点への対応に関して
zen-cart.com にて、低度のセキュリティ上の問題点が指摘されパッチの適用についての記事が掲載されておりました。
概要としては、「SQLインジェクションアタックを受けた際、アタックは防ぎますが画面上にエラーメッセージが表示されるます。その中にデータベースのテーブル名が表示されてしまうため、これがPCIの監査で「問題点」として不合格と判定されるるようです。
これは脆弱性に関連した何らかの危険を及ぼすような問題を引き起こす内容ではなく、小さな問題ではあるのですが PCIスキャンで不合格にならないように、改善のためのパッチを充てる事を勧められています。
a) "pci_patch_v13x_search.php" の様な名前を付けて新規にファイルを作成し、以下のコードを記述します。
<?php
if (isset($_GET['keyword']) && $_GET['keyword'] != '')
{
$count = substr_count($_GET['keyword'], '"');
if ($count == 1)
{
if(substr(stripslashes(trim($_GET['keyword'])), 0, 1) == '"')
{
$_GET['keyword'] .= '"';
}
}
$_GET['keyword'] = stripslashes($_GET['keyword']);
}b) /includes/extra_configures/ ディレクトリにアップロードします。
2009-06-24
管理画面の脆弱性に対するセキュリティパッチ
2009-06-21 Zencart 全バージョンに関して管理画面での脆弱性の問題に対応するためのセキュリティパッチがリリースされております。
http://www.zen-cart.com/forum/showthread.php?p=743675
※ Zen Cart Pro シリーズ各バージョン、ならびにビッグマウス提供の Zencart1.3.8a(日本語版)用のパッチファイルを準備いたしました。
このセキュリティパッチファイルは、2009年6月21日 zen-cart.com によりリリースされたセキュリティパッチに、Zen Cart Pro シリーズ用の修正を加えたものです。
今回のパッチファイルで上書き対象となっているファイル html_output.php には、別途最新バージョンにおいて行ったバグフィックス対象ファイルであったため、バグフィックス分を含めてのリリースとさせていただきます。
バグ修正内容: 管理画面において、キーワード検索時に文字化けを発生させるケースがあったため正しく文字コードを取得するよう修正。
パッチの内容: XSRF攻撃を防ぐ事を目的としたもので、form を送信する際に、都度 hidden 項目として "セキュリティトークン" を自動生成・付加する事で、form の送信元を認証するという動きをします。
※ zen_draw_form 関数を使わず、<form>タグをハードコーディングしていたり、別の関数を使ってフォームを送信するようなカスタマイズを行っている場合、あるいはそのような仕様で作られた追加モジュール類を利用している場合には、form が送信されなくなります。(送信が失敗して、管理画面の home にリダイレクトされれるでしょう)
※ この変更は管理画面に対するものだけで、ショップ側には影響はありません。
対象プログラム:
・ Zen Cart Pro 及び ZenCartPro-R 各バージョン
・ Zencart1.3.8a(日本語版)
<< Zen Cart Pro シリーズ用 セキュリティパッチ = ダウンロード >>
※ 2009-06-26 zen-cart.com において、パッチを適用した際バージョンサーバーと正しく連動するように調整が行われました。セキュリティパッチには、バージョンチェック用のパッチファイルが一つ追加されています。
もし、すでに当パッチを適用しておられる方は、最新版のパッチをダウンロードして、
admin/includes/extra_configures/
ディレクトリ内のファイルを一つ、対応するディレクトリにアップしてください。
【 適用手順 】
<新規追加ファイル>
/admin/includes/auto_loaders/config.security_patch_v138_20090619.php
/admin/includes/functions/extra_functions/security_patch_v138_20090619.php
/admin/includes/init_includes/init_security_patch_v138_20090619.php
/admin/includes/extra_configures/security_patch_v138_20090619.php (2009-06-26追加)
<上書き対象ファイル>
/admin/includes/functions/html_output.php
/admin/includes/functions/general.php
※ /admin の部分は実際の管理画面のディレクトリ名に読み替えてください。
1、<新規追加ファイル>をすべてサーバー上の対象ディレクトリにアップします。
上書きは発生しないはずです。
2、<上書き対象ファイル>を適用しますが、もし、これらの上書き対象ファイルに対してすでに何らかの変更を行っておられる場合には、修正部分をマージしてください。
注意:
今回の上書き対象となっている2つのファイルは、ショップ側にも同じようなフォルダ階層の中にあります。
今回の修正は /admin エリアのものですので、決してショップ側の同名ファイルを上書きするような事の無いようご注意ください。
修正内容:
◇ /admin/includes/functions/html_output.php
215行目から始まる
$form .= '>';
の部分を
$form .= '>' .zen_draw_hidden_field('enc_hint' ,'文字コード');
$form .= '<input type="hidden" name="securityToken" value="' . $_SESSION['securityToken'] . '" />';
のように変更しております。
◇ /admin/includes/functions/general.php
125行目から始まる
while (list($key, $value) = each($_GET)) {
if (($key != zen_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array))) $get_url .= $key . '=' . $value . '&';
}
の部分を以下のように変更(3行追加されています)
while (list($key, $value) = each($_GET)) {
if ($key == 'search' || $key == 'enc_hint') {
$value = urlencode($value);
}
if (($key != zen_session_name()) && ($key != 'error') && (!in_array($key, $exclude_array))) $get_url .= $key . '=' . $value . '&';
}
※ このセキュリティパッチを適用している場合でも、別途「管理画面のURLを想定しにくい名前に変更する」作業は必ず行ってください。 http://zencart-pro.com/help/node/151 をご参照ください。
※ 管理用ディレクトリに対して、「ベーシック認証」などによる制限をかけるのも有効な手段です。
2008-09-23
セキュリティに関する緊急なお知らせ:
SQLインジェクション脆弱性に対するセキュリティパッチに修正あり!
2008-09-19 に掲載したSQLインジェクションの問題への対応方法に問題があり、修正されたセキュリティパッチがリリースされております。
http://www.zen-cart.com/forum/showpost.php?p=616280&postcount=2
2度にわたり公表されたSQLインジェクションへの対応方法ですが、その両方に問題がある事が判り、9月19日分の修正と、8月31日分の修正に対して追加修正作業が必要になります。
もし、8月31日分の修正を行っていない場合には、「今回のパッチの適用」によって9月19日のセキュリティパッチを上書きする(もしくは新規追加)だけで問題ありません。
【 適用手順 】
1、 上記のアドレスよりパッチファイルをダウンロードし、解凍したファイル security_patch_v138_20080919.php をFTPなどで、ご利用の Zen Cart Pro(Zencart)の以下のディレクトリ内にアップロードしてください。
/includes/extra_configures/ フォルダの中に新規追加(前回適用されている方は上書き)
2、※ zencart 1.3.x 以降(Zencart1.3.8a、"Zen Cart Pro"を含む)で、前回9月1日にお知らせした shopping_cart.php に対する修正を適用されている方は次の作業も行ってください。 (適用されていない場合は、作業不要です)
/includes/classes/ フォルダ内の shopping_cart.php ファイルに対して以下の修正を行う
$prodId = ereg_replace('[^0-9a-f:]', '', $key);
$prodId = ereg_replace('[^0-9a-f:.]', '', $key);
参考: この修正を行わなかった場合は、以下の問題が発生します。
a) チェックボックスによる商品オプションを設定している場合、カートに格納されない
b) 商品数量に小数点を利用している場合、数量が正しく扱われない
2008-09-19
セキュリティに関する緊急なお知らせ: SQLインジェクション脆弱性に対するセキュリティパッチのリリース!
2008-08-31 に報告のあったSQLインジェクションの問題への対応方法に不足があり、対応のためのセキュリティパッチがリリースされております。
http://www.zen-cart.com/forum/showthread.php?t=108428
上記URLにて公開されているセキュリティパッチをダウンロード、解凍後、以下の手順でご利用のZen Cart Pro(Zencart)に適用なさってください。
(Zen Cart Pro 及び、Zencart1.3.8a、またv1.2.0以降の全バージョンのZencartが対象となります)
【 適用手順 】
1、 解凍したファイル security_patch_v138_20080919.php をFTPなどで、ご利用の Zen Cart Pro(Zencart)の以下のディレクトリ内にアップロードしてください。
/includes/extra_configures/ フォルダの中
以上です。
なお、前回の 2008-08-31 分の修正を行っておられる場合も今回のパッチの適用を行ってください。
前回の修正はそのままにしておいても問題ありません。
前回の修正を行っていない場合は、今回のファイルの適用だけで大丈夫です。
2008-08-31
セキュリティに関する緊急なお知らせ: SQLインジェクションの危険性!
利用中のサーバーにおいて、 magic_quote_gpc がPHP設定で無効になっている場合、悪意のある動作を許してしまう危険性をもった脆弱性が発見されました。
※ 以下に記載された対応を早急に適用してください。
対象ファイル: /includes/classes/shopping_cart.php だけ
1. Zen Cart Pro 及び、Zencart1.3.8a、またv1.2.0以降の全バージョンのZencartにおいても同様の修正が必要になります。
a) 300行目あたりに以下の2行を追加します:
※参考(v1.2.xでは200行目あたりにあります)
if (is_array($value) ) {
reset($value);
while (list($opt, $val) = each($value)) {
$val = (int)$val;
$products_options_sort_order= zen_get_attributes_options_sort_order(zen_get_prid($products_id), $option, $opt);
$sql = "insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . "
(customers_id, products_id, products_options_id, products_options_value_id, products_options_sort_order)
values ('" . (int)$_SESSION['customer_id'] . "', '" . zen_db_input($products_id) . "', '" .
(int)$option.'_chk'. $val . "', '" . $val . "', '" . $products_options_sort_order . "')";
$db->Execute($sql);
}
} else {
if ($attr_value) {
$attr_value = zen_db_input($attr_value);
}
$value = (int)$value;
$products_options_sort_order= zen_get_attributes_options_sort_order(zen_get_prid($products_id), $option, $value);
$sql = "insert into " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . "
(customers_id, products_id, products_options_id, products_options_value_id, products_options_value_text, products_options_sort_order)
values ('" . (int)$_SESSION['customer_id'] . "', '" . zen_db_input($products_id) . "', '" .
(int)$option . "', '" . $value . "', '" . $attr_value . "', '" . $products_options_sort_order . "')";
$db->Execute($sql);
} b) 400行目近辺にも、大変よく似たコードがあります。ここにも以下の通り2行挿入します:
※参考(v1.2.xでは300行目あたりにあります)
if (is_array($value) ) {
reset($value);
while (list($opt, $val) = each($value)) {
$val = (int)$val;
$products_options_sort_order= zen_get_attributes_options_sort_order(zen_get_prid($products_id), $option, $opt);
$sql = "update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . "
set products_options_value_id = '" . $val . "'
where customers_id = '" . (int)$_SESSION['customer_id'] . "'
and products_id = '" . zen_db_input($products_id) . "'
and products_options_id = '" . (int)$option.'_chk'.$val . "'";
$db->Execute($sql);
}
} else {
if (isset($_SESSION['customer_id'])) {
$value = (int)$value;
$sql = "update " . TABLE_CUSTOMERS_BASKET_ATTRIBUTES . "
set products_options_value_id = '" . $value . "', products_options_value_text = '" . $attr_value . "'
where customers_id = '" . (int)$_SESSION['customer_id'] . "'
and products_id = '" . zen_db_input($products_id) . "'
and products_options_id = '" . (int)$option . "'";
$db->Execute($sql);
}
}2. 以下の修正は、zencart1.2.x系には不要です:
バージョンによって違いますが、"Zen Cart Pro" および、"Zencart1.3.8a"では、1728行目辺りになります:
"$prodId= " の記述がある行を検索し以下のように修正します
function actionMultipleAddProduct($goto, $parameters) {
global $messageStack;
if (is_array($_POST['products_id']) && sizeof($_POST['products_id']) > 0) {
while ( list( $key, $val ) = each($_POST['products_id']) ) {
if ($val > 0) {
$adjust_max = false;
$prodId = ereg_replace('[^0-9a-f:]', '', $key);
$qty = $val;
$add_max = zen_get_products_quantity_order_max($prodId);
...注意: 修正時にファイルの最後に余分な行が残されていた場合に、カートに商品を入れる際にエラーが発生するようになってしまうかもしれません。
その場合は、このファイルの最下部にある ?> の閉じタグを削除する事で解決するかもしれません。
※ 上記の閉じタグ削除の処理について
※ ここに記述した修正内容は、 zen-cart.com に掲載されていた内容を翻訳したものです。
※ 最新バージョンの"Zen Cart Pro"およびZencart1.3.8a(日本語版)v2.9 以降ではこれらの問題の対応は完了しております。




