各種アップデート最新情報

■ 2020-02-18 「Chrome 80 問題に対するSameSite設定独自対応」

Chrome 80 リリースにおいて、セキュリティとプライバシー強化が行われます。
これに伴い、リンク方式を使い「支払いサイト」に移動してカード等での手続きを終えてからZencart に戻ってきて注文完了」という方式や、ゲートウェイ方式であっても 3Dセキュアを使うことで、visa や master の認証画面に画面遷移が発生するタイプの場合、正常に処理が終了しないケースが発生することが懸念されています。

※基本的には、3Dセキュアや、外部サイトで支払いをしてくるタイプの決済を使っていない限りは緊急な対応は必要ないと思われます。

現状(2020年2月18日現在)において、zen-cart.com での正式対応は発表されていませんが、ZencartProユーザーの皆様で上記のような支払い方法をご利用の場合、「お金を払ったのに注文が無い」というトラブルを事前に防止するため、早めに修正を行うことをおすすめします。

修正ファイルと手順については、サポートサイト上に掲載しておりますので、ご登録アカウントでログインしてご確認ください。

ZencartPro サポートサイトへ(※要ユーザーログイン)>>

※ Zencart Proシリーズ以外の各バージョンの無料版をご利用の方については、個別の対応ツールを準備しております。詳しくは弊社までお問い合わせください。

Chrome 80問題のための samesite 対応について>>

■ 2019-09-12 「軽減税率対応商品による複数税率設定について」

頻繁にお問合せをいただくようになった、Zencartの税率設定機能についてですが、「地域・税率設定」>「税種別設定」に必要な手順を記載しておりますので、是非そちらをご参照ください。
また、これと合わせて「複数税率に対応した楽天市場の item.csv に対応するためのバージョンアップ(Pro-R)」も公開中です。

先日公開したセキュリティパッチと、管理画面の商品マスタCSV入出力へのバージョンアップだけですので、他のバージョンアップ作業を行っていないショップ様でも単独で導入可能です。

■ 2019-07-19  「v156c より前の全てのバージョンに対するセキュリティパッチ」

Zencart 全バージョンに存在している顧客への商品の通知機能にある "notyfy" パラメータのサニタライズに関するセキュリティ上の脆弱性が報告されました。 SQLインジェクションに繋がる可能性があります。

詳しくはこちら>>

■ 2019-06-20 PHP7.3対応用バージョンアップ提供開始。

もはや、必須になってきたPHP7系環境でのサイト運営状況に合わせて、ZenCartProシリーズもPHP7対応を進めてきましたが、今回のリリースではPHP7.3対応版としてのリリースとなりました。サポートサイトにログインしてファイルをダウンロードなさってください。
https://ssl.bigmouse.biz/pro/

■ 2018-12-19 クーポン券の有効期限が 2018年までしか表示できない。(Zencart1.3.9以前の無料プログラムをご利用の方向け)

Zencart の古いバージョンをご利用のユーザー様より、しばしばお問い合わせをいただいているのが、「クーポン券の有効期限を設定するドロップダウンが 2018年までしか選べない。どうすればよいのか?」というご質問です。

ZenCartProシリーズでは、 2013年にこの問題には対応済みですので ver2.1.6以降のプログラムをご利用の場合は対応は不要です。
以下は、あまりにお問い合わせが多いため、対応方法をお知らせするためにまとめたものです。
お困りの方は参考にご利用ください。

<修整点>

/{管理画面ディレクトリ}/includes/functions/general.php
以下の記述部分を探してください。

Code:
    $month_array = array();
    $month_array[1] =_JANUARY;
    $month_array[2] =_FEBRUARY;
    $month_array[3] =_MARCH;
    $month_array[4] =_APRIL;
    $month_array[5] =_MAY;
    $month_array[6] =_JUNE;
    $month_array[7] =_JULY;
    $month_array[8] =_AUGUST;
    $month_array[9] =_SEPTEMBER;
    $month_array[10] =_OCTOBER;
    $month_array[11] =_NOVEMBER;
    $month_array[12] =_DECEMBER;
    $usedate = getdate($date);
    $day = $usedate['mday'];
    $month = $usedate['mon'];
    $year = $usedate['year'];
    $date_selector = '<select name="'. $prefix .'_day">';
    for ($i=1;$i<32;$i++){
      $date_selector .= '<option value="' . $i . '"';
      if ($i==$day) $date_selector .= 'selected';
      $date_selector .= '>' . $i . '</option>';
    }
    $date_selector .= '</select>';
    $date_selector .= '<select name="'. $prefix .'_month">';
    for ($i=1;$i<13;$i++){
      $date_selector .= '<option value="' . $i . '"';
      if ($i==$month) $date_selector .= 'selected';
      $date_selector .= '>' . $month_array[$i] . '</option>';
    }
    $date_selector .= '</select>';
    $date_selector .= '<select name="'. $prefix .'_year">';
    for ($i=2001;$i<2019;$i++){

上記部分を以下のように変更

    global $db; // ここを追加
    $month_array = array();
    $month_array[1] =_JANUARY;
    $month_array[2] =_FEBRUARY;
    $month_array[3] =_MARCH;
    $month_array[4] =_APRIL;
    $month_array[5] =_MAY;
    $month_array[6] =_JUNE;
    $month_array[7] =_JULY;
    $month_array[8] =_AUGUST;
    $month_array[9] =_SEPTEMBER;
    $month_array[10] =_OCTOBER;
    $month_array[11] =_NOVEMBER;
    $month_array[12] =_DECEMBER;
    $usedate = getdate($date);
    $day = $usedate['mday'];
    $month = $usedate['mon'];
    $year = $usedate['year'];
    $date_selector = '<select name="'. $prefix .'_day">';
    for ($i=1;$i<32;$i++){
      $date_selector .= '<option value="' . $i . '"';
      if ($i==$day) $date_selector .= 'selected';
      $date_selector .= '>' . $i . '</option>';
    }
    $date_selector .= '</select>';
    $date_selector .= '<select name="'. $prefix .'_month">';
    for ($i=1;$i<13;$i++){
      $date_selector .= '<option value="' . $i . '"';
      if ($i==$month) $date_selector .= 'selected';
      $date_selector .= '>' . $month_array[$i] . '</option>';
    }
    $date_selector .= '</select>';
    $date_selector .= '<select name="'. $prefix .'_year">';
    // for ($i=2001;$i<2019;$i++){ のところを消して代わりに以下の行を追加
    $Fresh_Installation = $db->Execute("select unix_timestamp(project_version_date_applied) as project_version_date_applied from ". TABLE_PROJECT_VERSION . " order by project_version_date_applied limit 1");
for ($i=date("Y", $Fresh_Installation->fields['project_version_date_applied']);$i<(date("Y")+10);$i++){


■ 2017-06-30 各種クレジットカード決済サービスの「非通過型」対応について。

近年のネット取引の拡大と、ネット上でのクレジットカードの利用増加に伴い、セキュリティ対策が不十分なECサイトにおいて「不正アクセス」によるカード情報漏洩が拡大、取得したカード情報での成りすましなどによる犯罪被害が拡大しています。
この状況に対して緊急に対応するため、経済産業省/日本クレジット協会は。2016年2月「クレジットカード取引におけるセキュリティ対策の強化に向けた実行計画」を公表し、その中ですべてのEC加盟店において2018年3月末までにカード情報非保持化もしくはPCIDSS準拠が求められました。

さらにカード情報が通信されることがないようにするための「カード情報の非通過型接続」による決済への対応が求めれら、各決済代行会社ではそれぞれが JavaScript を利用して、決済サーバーへの通信の前にブラウザ内でカード情報を暗号化した後にデータ送信を行なう「トークン決済」に対応した接続サービスを提供開始しています。

これに伴い、クレジットカードをショップ上の画面で入力するタイプのECサイトはすべて来年の3月までにトークン決済(カード情報非通過型)への対応が必要となります。

弊社では、すでに「ペイジェント」「GMOペイメント」「Zeus」「ベリトランス」の接続モジュールをトークン決済に対応完了しております。

同対応は、カード情報を入力するために決済代行会社の準備した画面い移動するリンク型以外の「すべてのクレジットカード決済サービス」が対象となりますので、対象となるショップ様が極めて多く、ぎりぎりになってのご依頼の場合、ご要望が込み合ってしまい対応できなくなることも予想されます。

早めの対応をおすすめさせていただきます。

 

■ 2017-06-19 ヤマト運輸配送時間帯指定変更に伴う修正。

ヤマト運輸のサービス内容変更により、「12時~14時」の時間帯指定廃止と、「20時~21時」の配送時間が「19時~21時」の指定に変更となりました。

< ZenCart Pro 修整点>

/includes/languages/japanese/modules/shipping/yamato.php
23行目近辺に記載されている時間帯指定ドロップダウンの定義部分を変更します。(※ バージョンにより行数は異ります):

Code:
  array('id'=>'希望なし',  'text'=>'希望なし'),
  array('id'=>'午前中',    'text'=>'午前中'),
  array('id'=>'12時~14時','text'=>'12時~14時'),
  array('id'=>'14時~16時','text'=>'14時~16時'),
  array('id'=>'16時~18時','text'=>'16時~18時'),
  array('id'=>'18時~20時','text'=>'18時~20時'),
  array('id'=>'20時~21時','text'=>'20時~21時'),

上記部分を以下のように変更

  array('id'=>'希望なし',  'text'=>'希望なし'),
  array('id'=>'午前中',    'text'=>'午前中'),
  array('id'=>'14時~16時','text'=>'14時~16時'),
  array('id'=>'16時~18時','text'=>'16時~18時'),
  array('id'=>'18時~20時','text'=>'18時~20時'),
  array('id'=>'19時~21時','text'=>'19時~21時'),

<< ZenCart Pro 用 修正ファイル = ダウンロード >>

<< ZenCartPro-R 修正点 >>

※ ZencCartPro-R においては、上記と全く同じファイルの修正の他に、利用している配送モジュールに対して個別の対応が必要となります。

/includes/languages/japanese/modules/shipping/freesetting.php
/includes/languages/japanese/modules/shipping/freesetting1.php
/includes/languages/japanese/modules/shipping/freesetting2.php

15行目あたりの以下の記述部分。 すべて同じ修正となります。

Code:
   array('id' => '午前中', 'text' => '午前中'),
   array('id' => '12時~14時', 'text' => '12時~14時'),
   array('id' => '14時~16時', 'text' => '14時~16時'),
   array('id' => '16時~18時', 'text' => '16時~18時'),
   array('id' => '18時~20時', 'text' => '18時~20時'),
   array('id' => '20時~21時', 'text' => '20時~21時'));

上記部分を以下のように変更

   array('id' => '午前中', 'text' => '午前中'),
   array('id' => '14時~16時', 'text' => '14時~16時'),
   array('id' => '16時~18時', 'text' => '16時~18時'),
   array('id' => '18時~20時', 'text' => '18時~20時'),
   array('id' => '19時~21時', 'text' => '19時~21時'));

また、設定によっては、モバイル用言語を利用している場合もあり、その場合には以下のファイルに対しても同じ修正を行なう必要があります。

/includes/languages/mobile/modules/shipping/freesetting.php
/includes/languages/mobile/modules/shipping/freesetting1.php
/includes/languages/mobile/modules/shipping/freesetting2.php

<< ZenCartPro-R 用修正ファイル = ダウンロード >>

 

■ 2017-02-02 Paypal ウェブペイメントスタンダード仕様変更に伴う修正について。

ペイパルにおいて2017年1月18日よりウェブペイメントスタンダードの仕様変更があり、同サービスを使ってペイパルに接続している場合には、修正なしで利用するとエラーになります。

※ "ウェブペイメントスタンダード"は非推奨となっておりますので、可能であれば"エクスプレスチェックアウト"へ利用の切り替えをなさることをお勧めいたします。

修正点:

・金額フィールドに桁数区切りのカンマが利用できなくなったため、金額の表示形式を変更。

/includes/modules/payment/paypal.php
274行目近辺(※ バージョンにより行数は異ります)の該当箇所に対して、赤文字で記載している行を変更します:

Code:

'amount' => number_format($this->transaction_amount, $currencies->get_decimal_places($my_currency)),

上記赤文字部分を以下のように変更

'amount' => round($this->transaction_amount, $currencies->get_decimal_places($my_currency)),

 

/includes/modules/payment/paypal/paypal_functions.php
706行目近辺(※ バージョンにより行数は異ります)の該当部分の、赤文字で記載している2箇所を変更します:

Code:

      $optionsST[$key] = number_format(abs(strval($value)), 2);
    }
    if (is_array($optionsLI)) foreach ($optionsLI as $key=>$value) {
      if (strstr($key, 'amount')) $optionsLI[$key] = number_format(abs(strval($value)), 2);

上記赤文字部分を以下のように変更

       $optionsST[$key] = round(abs(strval($value)), 2);
    }
    if (is_array($optionsLI)) foreach ($optionsLI as $key=>$value) {
      if (strstr($key, 'amount')) $optionsLI[$key] = round(abs(strval($value)), 2);

上記2ファイル内の合計3箇所にある "number_format" という部分を "round" に変更すれば完了です。 

 

■ 2016-05-20 Paypal実装環境変更対応について。

ペイパルより発表されている、一連のセキュリティアップグレード計画において、ほとんどの部分はサーバー側の設定に依存しておりますが、一部接続モジュール自体への変更が必要な部分がございますので、修整が必要な内容に関してお知らせいたします。
今回は修整点が少ないことと、ペイパルモジュールが複数ファイルにまたがることから、修整すべき点のみお伝えいたします。

修正点:
・IPN認証のポストバックをHTTP ではなく、HTTPS に変更
・新仕様になったPaypal のサンドボックスを利用できるよう、サンドボックス接続先の設定を変更

/includes/modules/payment/paypal/paypal_functions.php
400行目近辺(※ バージョンにより行数は異ります)の該当箇所に対して、赤文字で記載している行を変更します:

Code:

  function ipn_postback($mode = 'IPN') {
    $info = '';
    $header = '';      $scheme = 'http://'; <=ここの http を https に変更します
         $scheme = 'https://'; <=修整

※大抵の場合は、上記対応だけで大丈夫ですが、サーバーによっては明示的に TLS 1.2 を利用するよう指定しなければならないものもありますので、合わせて以下の修整を行なうことも出来ます。

/includes/modules/payment/paypal/paypal_curl.php
412行目近辺(※ バージョンにより行数は異ります)の該当箇所に対して、赤文字で記載している行を追加します:

Code:

    $response = curl_exec($ch);
    $commError = curl_error($ch);
    $commErrNo = curl_errno($ch);
    
    if ($commErrNo == 35) {
trigger_error('ALERT: Your serveris encountering connection problems using TLS 1.2 .', E_USER_NOTICE);
curl_setopt($ch, CURLOPT_SSLVERSION, 6);
$response = curl_exec($ch);
$commError = curl_error($ch);
$commErrNo = curl_errno($ch);
}
$commInfo = @curl_getinfo($ch); curl_close($ch);

※ 赤文字部分を追加しています。
※ サーバーのデフォルト設定で TLS v1.2 を利用するよう指定されていない場合など、Paypal との通信でSSLプロトコルエラーが発生した際に、代替処理を行なうと共に警告を表示させるようにしています。(文字コード指定ミスによるエラーを避けるため、警告文は英語にしています。)
     警告が出ても動く場合もありますが、かなりの遅延が発生することでトラブルになるかも知れません。
適切に TLS を設定いただくよう、ホスティング業者様にご相談いただいたほうが良いでしょう。

 

 

合わせて、paypalの sandbox が新仕様になってURLが代わっておりますので、今後のために以下の2つのファイルに対して、 sandbox のURLも変更しておいたほうが良いかも知れません。

/includes/modules/payment/paypal/paypal_curl.php
48行目近辺(※ バージョンにより行数は異ります)の該当箇所に対して、赤文字で記載している行を変更します:

Code:

  var $_endpoints = array('live'    => 'https://api-3t.paypal.com/nvp',
                          'sandbox' => 'https://api.sandbox.paypal.com/nvp');

この部分を以下のように変更します。

Code:

  var $_endpoints = array('live'    => 'https://api-3t.paypal.com/nvp',
      'sandbox' => 'https://api-3t.sandbox.paypal.com/nvp');

/includes/modules/payment/paypal_wpp.php
1079行目近辺(※ バージョンにより行数は異ります)の該当箇所に対して、赤文字で記載している行を変更します:

Code:

      $doPayPal->_endpoints = array('live'    => 'https://api-3t.paypal.com/nvp',
                                    'sandbox' => 'https://api.sandbox.paypal.com/nvp');

この部分を以下のように変更します。

Code:

        $doPayPal->_endpoints = array('live'    => 'https://api-3t.paypal.com/nvp',
                                     'sandbox' => 'https://api-3t.sandbox.paypal.com/nvp');


 

 

 

 


 

■ 2015-12-02  メルマガ配信でもお知らせしたパッチについて。

先日11月28日に弊社(ビッグマウス)より配信した、zencart.com からのセキュリティパッチの公開についての追伸です。

今回のパッチで問題になりそうなのは「注文コメント」のXSS対応ですが、本件については弊社提供の ZenCartProシリーズならびにZencart.1.3.8a、1.3.9hに対しては、すでに対応ずみですので、パッチの適用は必要ありません。

その他のパッチについては、重要性はかなり低く弊社での公式対応は今のところ予定しておりません

 


■ 2015-10-05  情報漏洩の問題点に関連したセキュリティパッチを準備しました。

利用になっているサーバーの設定によっては、Get の引数で指定した際にサーバーの任意のファイル等に対してアクセスが可能になる問題を持っているケースがあります。
zencart 内のスクリプトの中にその問題点を利用することができる部分が存在するため、修正が勧められています。

対応は、パッチファイルをひとつアップロードするだけです。

※ ダウンロードしたファイルを解凍後に出てくる php ファイルを以下の場所に設置してください。

  includes/extra_configures/security_patch_v154_and_older.php

<< セキュリティパッチ = ダウンロード >>

 


■ 2011-10-28  「友達に知らせる」の悪用を避けるための追加機能を準備しました。

「友達に知らせる」機能を悪用したスパムメール送信防止のため、同機能の ON/OFF 設定と、"Captcha"(画像認証)による確認の利用設定を追加しております。

詳細は会員用サイトにログイン後、「無料追加モジュール(for Pro)「無料追加モジュール(for Pro-R)、を参照ください。


■ 2011-10-25  iPhone テンプレートへの拡張機能を追加しました。

携帯・スマートフォンで表示するバナーをそれぞれ登録できるようにバナー機能を拡張しました。
iPhone テンプレートにおいて表示する画像サイズを管理画面から個別指定できるように専用の設定項目を追加しました。

詳細は会員用サイトにログイン後「無料追加モジュール(for Pro)「無料追加モジュール(for Pro-R)、を参照ください。


■ 2011-9-27  ニックネームによるレビュー投稿無料モジュールの提供開始

レビューをニックネームで投稿できるようにするとともに、ニックネーム欄が空欄の時に投稿者名表示のデフォルトを指定できる追加モジュールを無償で公開しております。

詳細は会員用サイトにログイン後「無料追加モジュール(for Pro)「無料追加モジュール(for Pro-R)、を参照ください。


■ 2011-06-22  PHP5.3 対応のためバージョンアップファイルを準備しました。

詳細は会員用サイトにログイン後「追加修正スクリプト」ページをご参照ください。


■ 2011-06-09  SQLインジェクション対応のための追加修正を行いました。

詳細は会員用サイトにログイン後「追加修正スクリプト」ページをご参照ください。


■ 2010-11-10  郵便番号データ更新機能 調整を行いました。

詳細は会員用サイトにログイン後「追加修正スクリプト」ページをご参照ください。


■ 2010-10-18  お買いものポイントモジュール 仕様の変更を行いました。

詳細は会員用サイトにログイン後「追加修正スクリプト」ページをご参照ください。


■ 2010-10-18  スマートフォン対応テンプレート バグ修正を行いました。

詳細は会員用サイトにログイン後「追加修正スクリプト」ページをご参照ください。

 

2010-07-14

ZenCartPro、ZenCartPro-R iPhone(スマートフォン)対応テンプレートを追加してバージョンアップ ver.2.0.0 となります。

主な修正・変更点:
・スマートフォン専用テンプレートの追加
・スマートフォン用画面において表示する商品名・商品説明文等の情報を「PC用」「モバイル用」から選択可能
・スマートフォン専用「定番ページ」の追加

すでにご利用中のユーザー様は、バージョンアップ用の差分ファイルを準備しております。(無償)

 

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行を追加します:

Code:
  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行を追加します:

Code:
    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)" と記載している部分を追加します:

Code:
<?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 以降ではこれらの問題の対応は完了しております。