セキュリティについて

 ※ 2011-10-31 「友達に知らせる」機能の悪用が増えていますので対応をお勧めします。

Zen Cart Pro ユーザーの皆様にはすでにメールでお知らせしております通り、Zencart のデフォルト機能である「友達に知らせる」を悪用したスパムメール配信が多発しております。

当サイト内「アップデート最新情報」をご確認の上、事前に必要な対応をお済ませください。


◆ Zencart1.3.8a, 1.3.9h ユーザー様へ

先日発表された Zencart1.5.0DC1 においては、この「友達に知らせる」機能自体が完全に削除されておりました。
管理画面より、この機能を制限して「ログインしている会員にだけ」利用を許可するための設定はありますが、スパマーはこの条件を満たして迷惑メールを送っているようです。

こうしたスパム行為を止めるためには、単にリンクを非表示にするだけでは無く、機能の利用自体を制限する必要があります。

「友達に教知らせる」の無効化方法
/includes/modules/pages/tell_a_friend/header_php.php
ファイルの一番上に
<?php zen_redirect(zen_href_link(FILENAME_DEFAULT)); ?>
を追記

管理画面設定
商品の管理 - 商品タイプの設定 -
Product - General
Product - Music
Document - General
Document - Product
Product - Free Shipping

「友達に知らせる」ボタン表示 を 0 = 表示しない (False) に変更
追加設定・ツール - サイドボックスの表示設定 で、全てのテンプレートの tell_a_friend.php を OFF にする

 

【Zen Cart Pro ショップのセキュリティを向上させるためのステップ】

Zen Cart Pro では、現在考えうるさまざまな形のセキュリティ対策が施されております。
それでも悪意ある攻撃からサイトを守るためには、Zen Cart Pro の持っているセキュリティアップに対する機能を有効に利用すると共に、普段の運営においても気をつけるべき事がたくさんあります。

以下の情報をよくお読みいただき、より安全なサイト運営にお役立てください。

 ※ Zen Cart ProZencartセキュリティ対策に関する最新情報は、当サイト内「アップデート最新情報」ページで常に更新されています。
こうした情報も定期的にチェックし、ご自身のサイトが最新のセキュリティ状態に保たれている事をご確認ください。
 

0. SSLによるセキュリティ保護

インターネットでは伝送途中のデータがいとも簡単に盗み見されてしまいます。インターネットに流れる情報は、特殊な方法を使わない限りは、すべて平文で送受信されているためです。つまり、悪意を持つ人が何らかの手段で伝送途中のデータを手にすることが出来れば、簡単にデータの中身を覗き見ることが出来てしまう訳です。また、そのための無料ソフトが公開されていたり、少しの知識があれば簡単にこうした盗聴が出来てしまうことは意外に知られていないため、私たちは無防備な状態にあるといえるでしょう。

管理者として "Zen Cart Pro" や、利用しているデータベースに対してセキュリティを高める修正を行う前に、その修正作業自体を安全に行うために、初めにあなた自身が安全な環境を確保しておく必要があります。そうしなければ、もしだれかがあなたの行う通信内容を覗き見していたりしていれば、重要な情報はすぐに外部に流出してしまうでしょう。
最低限の取り組みとして守らなければならないことは、サーバーに接続する場合にはSSLを利用するという事です。

ショップに対しては、専用のSSL証明書を利用する事が推奨されています。共用のSSL証明書の利用よりもより安全性の高さ明らかに示すことができます。
また、携帯に対応している "Zen Cart Pro" においては、共用のSSL自体をサポートしません。
たとえ携帯サイトを利用しない場合でも、共用のSSLの利用のためには別の部分でセキュリティを犠牲にする必要があるため、"Zen Cart Pro" では、共用SSLは特別に修正を行わない限り利用できない仕組みになっています。

専用のSSL証明書の取得には通常専用のIPアドレスが必要になりますので、証明書の取得の費用と共に、ホスティング会社への専用IPアドレス利用のための費用が必要になる事が多いのですが、それでもお客様に安心してご利用いただくショップを運営するにはその価値があるでしょう。

さらに、もしご利用中のサーバーにおいてFTPSがサポートされているなら、安全性の確保されていないFTPの代わりにSSL/TLSを提供するプログラムを使用するとよいでしょう。このツールは送受信する情報を暗号化する事でセキュリティを確保してくれます。

 

◆以下に、Zen Cart Pro で作成されたサイトのセキュリティを向上させるためのいくつかのステップをリストアップします。

 

1. /zc_install フォルダーを削除します。

インストールがいったん完了したら、/zc_install フォルダをリネームするよりも完全に削除してください。
万が一、だれかがこのフォルダ発見した場合の脆弱性を残してしまう事になります。

2. /admin フォルダ の名前を変更します。

インストールの後に管理画面用のディレクトリである、/admin を必ず別のフォルダ名に変更してください。
こうしておけば、ハッカーがあなたショップの管理領域へのアクセス方法を見つけたり、侵入のためのどんな攻撃も試みる事がかなり困難になるでしょう。

以下の手順でフォルダ名変更作業を行ってください。
(※以下の変更を行う前に、現在のファイルとデータベースのバックアップを必ず行ってください。)

バージョンの新しいZenCartPro を新規にインストールした場合には、管理画面のディレクトリ名を変更しても設定ファイルの変更が不要になりました。(Zen Cart Pro ver.2.1.5以降、 ZenCartPro-R ver.2.1.3以降)
上記バージョンを新規導入されたは以下の項目Aの configure.php ファイルへの修正作業は不要です。
【※重要】 基本設定ファイルで上書きできないため、こちらの変更はバージョンアップファイルには含まれていません。 前バージョンよりバージョンアップされている場合には、これまで通り以下の設定ファイルへの修正作業が必要となります。
 

A -メモ帳のようなテキストエディタを使用して、admin/includes/configure.php を開いてください。

デフォルトの "admin" で設定されているすべての設定値を、変更した新しいフォルダ名に変えてください。
よりセキュリティを高めるために、新しいフォルダー名に大文字と小文字と数と組み合わせたものを利用するとよいでしょう。(当然の事ですが、日本語は利用できません。すべて半角の英数で指定してください)
より長く複雑なフォルダー名にするほど、より安全になるでしょう。
※ 必ずすべての / は元の状態に残しておいてください。

以下のセクションを変更してください:

define('DIR_WS_ADMIN', '/admin/');
define('DIR_WS_CATALOG', '/');
define('DIR_WS_HTTPS_ADMIN', '/admin/');
define('DIR_WS_HTTPS_CATALOG', '/');

もうひとつ以下のセクション:

define('DIR_FS_ADMIN', '/home/mystore.com/www/public/admin/');
define('DIR_FS_CATALOG', '/home/mystore.com/www/public/');

例えば、最終的にこのような形になります: (新しい管理画面フォルダ名 "mysecretadminarea")

define('DIR_WS_ADMIN', '/mysecretadminarea/');
define('DIR_WS_CATALOG', '/');
define('DIR_WS_HTTPS_ADMIN', '/mysecretadminarea/');
define('DIR_WS_HTTPS_CATALOG', '/');

および

define('DIR_FS_ADMIN', '/home/mystore.com/www/public/mysecretadminarea/');
define('DIR_FS_CATALOG', '/home/mystore.com/www/public/');

 

 

 

B - サーバーの管理ツールで利用できるファイルマネージャーや、FTP(FTPS)のソフトを利用して、 /admin ディレクトリの名前を上記で変更した新しい名前に合わせてリネームしてください。

C - 管理画面にログインするため、先ほど上のステップでリネームした新しい名前に合わせたURLにアクセスできることを確認してください。

上の例であれば 
http://www.example.com/admin/             であった管理画面のURLは、
http://www.example.com/mysecretadminarea/     になります。

あなたと顧客の情報を保護するためにSSLの使用が強く勧められます
サーバーにSSL証明書がインストールされていれば、https の設定を行い常に通信は https:// を利用するようにしてください。
そうすればパケットスニッファーから、新しい管理画面のフォルダ名を保護する事ができます。

※ また、これらの対応に加えて管理エリアのディレクトリに対してベーシック認証を掛けることも大変有効な対応方法といえるでしょう。

3. configure.phpファイル書き込み禁止を設定します。

重要な事として、2つの設定ファイル( configure.php )のパミッション設定を「書き込み禁止」にします。
通常、644 または 444 になるでしょう。
対象ファイル:
 /includes/configure.php
  /{管理画面}/includes/configure.php

FTP(FTPS)ソフトウェアでこれができないなら、サーバーの管理ツールなどで提供されるファイルマネージャを使用してみてください。

4. 使用しない管理者アカウントは削除する。作らない。

管理画面にログインしたら 「Default Mode」で「追加設定・ツール」>「管理者の設定」を開いてください。

そこで、使わない管理者アカウントがないかどうかチェックして、あればそれらを削除してください。
アカウント名としても、これまでよく利用されている admin は避けたほうがよいでしょう。

5. 管理者パスワードに関するセキュリティ

ハッカーに推測できないように、複雑なパスワードを使用しましょう。

管理者のパスワードの変更は、「管理者の設定」で管理者を選択して、「パスワードをリセット」ボタンをクリックするか、管理者リスト右端のリサイクルマークのようなアイコンをクリックして、新しいパスワードを設定します。

パスワードには少なくとも8文字以上の文字数をお勧めします。 また、大文字・小文字のアルファベットと数字が混じっているとなおよいでしょう。
もし単語を使用するなら、ふつうは連想できない2つの正常な単語を組み合わせるのは良い方法です。

6. 「html_includes」の「定番ページ( define pages )」を守る。

「定番ページの編集」で目的のページの編集を終えたら、そのファイルを保護しましょう。

A - FTP(FTPS)ソフトウェアを使用して、PC内にファイルをダウンロードして保存します。

対象となるファイルは、以下のディレクトリに保存されています。

日本語: /includes/languages/japanese/html_includes
携帯 : /includes/languages/mobile/html_includes
英語 : /includes/languages/english/html_includes

B -上記のディレクトリ以下のすべてのファイルとフォルダのパミッションを書き込みできない設定(通常は 644 )にします。

こうしておけば、仮にハッカーがシステムにアクセスできたとしても、それらのファイルを編集する事はできません。ハッカーにとってパミッションを変更する権限を奪うのというのはもっと難しい作業です。

※ ただし、この設定をしてしまうと、以後「定番ページの編集」で内容を変更したい場合には、パミッションを一旦書き込みできる設定に戻す必要がありますので、お忘れなく。

7. 覗き見を避けるために .htaccess ファイルを使用する。

いくつかのフォルダには、正確なファイル名を知らないとアクセスできないように、フォルダ内のファイルが見えてしまうのを防ぐための ".htaccess" ファイルがおいてあります。
あるフォルダに関しては、内部にあるすべてのPHPファイルが他のPHPファイルによって直接アクセスされる可能性を想定して、PHPスクリプトへのアクセスも防いでいます。これはセキュリティ上、大変に効果的な手段です。
これらのファイルは決して削除しないようにしてください。

また、いくつかフォルダには、空白の "index.html" ファイルが置いてあります。
それらは、ご利用のサーバーで ".htaccess" の利用が許可されていない場合や、ご利用のFTPソフトウェアが ".htaccess" ファイルをアップロード出来ない場合の代替手段としての置いてあります。
しかし、これらはディレクトリ内のファイル表示を防ぐだけであり、.PHPファイルの実行制限するものではありません。
効果のある代替手段ではありますが本当の保護にはなりませんし、他にも何かと困る場合が発生する可能性もありますので、いっそ".htaccess" ファイルが使用出来るサーバー環境に変更される方がより賢い選択です。

"index.html" ファイルがあるフォルダーに設置が勧めら得ている ".htaccess" ファイルの内容は以下のようなものです。 ( ご利用サーバ構成に依存します ):

#権限を持たないすべてのディレクトリブラウジングや.phpファイルへのアクセスを制限する

IndexIgnore */*
<Files *.php>
Order Deny,Allow
Deny from all
</Files>

#また以下の内容を追加する事で、 spiders.txt ファイルのバージョンを他人に見られないようにする事が出来ます。

<Files *.txt>
Order Deny,Allow
Deny from all
</Files>

ご利用のサーバーにおいて、自由に ".htaccess" ファイルを利用する事が出来ない場合は、もしかするとサーバーの管理ツールを使って希望する".htaccess" の設定が可能かもしれません。
もし、サーバー側ので設定が必要な場合は、サーバー業者様とよくご相談の上で正しく対応されるようにお勧めいたします。どのサーバーが適正であるかを明確にお伝えする事はできませんが、初めに考えるべき内容のガイドラインとしてお伝えします。
もしサーバー業者の選択でお悩みであれば、弊社ビッグマウスにご相談ください。

8. "ゲストに「友達に知らせる」機能を許可" を無効に設定します。

管理画面にログインし、「Default Mode」>「一般設定」>「メールの設定」より、"ゲストに「友達に知らせる」機能を許可" の項目を無効に設定します。
こうしておけば、ログインしていないユーザーが迷惑なメールメッセージを送るのにあなたのサーバを使用できないでしょう。

9. 画像フォルダとその他のフォルダの保護

初めのインストールの工程において、画像を設置するフォルダ ( /images/ )以下に対して、書き込みができるようにパミッション設定するように指示されます。
商品画像などをFTPを使用するのではなく、商品管理画面より画像ファイルをアップロードするインタフェースを使用できるようにするための設定です。 同様の様々な理由による他のファイルに関しても比較的緩いパミッション設定になっているはずです。

しかしながら、パミッションの設定が甘いとハッカーがそのようなフォルダ内に、悪意のあるファイルなどを設置する可能性があります。

したがって、すべての商品画像をすべてアップロードしサイトが完了したら、パミッションの設定を変更するとよいでしょう。
「フォルダのパミッションを 755」 に、「ファイルのパミッションを 644」 に変更してください。

※ このパミッションにしている間は、画像の自動リサイズ処理は正しく動作しません。
商品の追加・変更の際には、一時的にパミッションを元の書き込み権限をもった状態に設定する必要があるかもしれません。

ファイル/フォルダのパミッション設定

一般的な、LInux/UNIX サーバーにおける基本的なセキュリティのための推薦設定は以下の通りです。

フォルダー/ディレクトリ: 755
ファイル: 644

フォルダーの利用目的とパミッションの関係

インストールの際に、書き込み権限を与えるように指示されるのは以下のフォルダです。
ご利用のサーバーで.htaccess の利用が可能であれば、これらのフォルダに対して使用してください。

/cache

ここは、キャッシュセッションとデータベース情報に使用されます。
最善のセキュリティ保護方法は通常のウェブアクセスが出来ない領域、つまり公開ディレクトリである、”public_html/htdocs/www" などよりも上の階層に移動する事です。そうすればブラウザによるアクセスはできなくなります。

※管理画面の設定変更と configure.php の修正が必要です

A - configure.php を開き以下の設定情報を変更します。

define('DIR_FS_SQL_CACHE', '新しく変更したキャッシュディレクトリのパス');

B - 管理画面 「一般設定」>「セッション管理」>「セッション保存ディレクトリ」を変更します。

設定値を上記のパスと同じ値にします。

/images

上記した内容をご参照ください。

/includes/languages/言語名/html_includes

上記した内容をご参照ください。

/media

これは管理画面経由で、「音楽商品」のメディアをアップロードする際に利用するためのものです。(※ "Zen Cart Pro" では "Product-Music" 商品タイプは、携帯に対応しておりません)
FTPでアップロードする場合はもちろん、利用しない場合には書き込み権限を与える必要はありません。
パミッションは 755 に設定してください。(※ 「メディアコレクション」機能を利用しない場合にはインストール後削除推奨)

/pub

このディレクトリは、ダウンロード商品を提供する際に、サーバー内の本当のファイルやデータの場所が分からないようにして安全にダウンロードしていただくためのものです。( URLが共有されて、サイトからファイルを直接ダウンロードすることができないようにするために利用します。)。(※ 「ダウンロード商品」機能を利用しない場合にはインストール後削除推奨)

/extras

このディレクトリは、 テスト用のファイルなどがおかれていますが、通常の運営においては利用していません。
(※ Zen Cart Pro ver.2.1.4、ZenCartPro-R ver.2.1.2 以降ではこのディレクトリにアクセス出来ないよう制限を追加していますが、それ以前のバージョンと無料版を含むすべての Zencart においては、パッチの適用もしくは、インストール後に同ディレクトリ削除推奨)

/admin/backups

自動化されたデータベースバックアップのルーチンでデータを保存するのにで使用されます。(オプション)

/admin/postal

「郵便番号からの住所自動入力」機能のためのディレクトリです。一旦このディレクトリ内に郵便番号データを取り込んだ後DBにインストールします。
普段は755でも構いませんが、書き込み権限がないと郵便番号データを保存できませんので、データ更新作業の時には書き込み権限を与えるようにして下さい。

/admin/images/graphs

管理画面の「バナーの管理」で設定されているバナーの利用状況を示すための バーグラフを作成、表示するためのディレクトリです。
書き込み権限がない場合、グラフは表示されません。

/docs

Zencartの基本情報に関する文書資料等です。
元々サーバー上にアップする必要の無いものですので、仮にアップされているのであれば削除するか、リネームするかをお勧めします。

 

パミッション 777 権限を与えられているフォルダに関連した追加セキュリティ:

パミッション 777 で設定するように指定されているフォルダや、何らかの理由によりパミッションを 777 に設定しているフォルダに関しては、ディレクトリ内の .htaccess ファイルに以下のような追記する事が出来るでしょう。

# This code is great for directories where "NO" script should be run from
# but for whatever reason, you need Directory permissions to be 777 - which is wide-open and insecure by itself.
# Examples Directories would include: any 'images' dir., the 'bmz' dir. if using ImageHandler 2, the html_includes languages folder, etc

# Prevent directory viewing and the ability of any scripts to run.
# No type of script, be it PHP, PERL or whatever can normally be executed if ExecCGI is disabled.
OPTIONS -Indexes -ExecCGI

 

10. ブラウザでページを印刷する際にURLが印刷されないように設定する。

「配送表」や「納品書」をブラウザから印刷する場合に、デフォルトではページのヘッダなどにURLが一緒に印刷される様になっています。
このまま印刷すれば、見た目が悪いだけではなく管理画面のURLがわかってしまいます。

ブラウザで印刷する際にURLを印刷するのを止めるためには、ブラウザの印刷設定を変更する必要があります。

Micro Soft Internet Explorer

「ファイル」>「ページ設定」
「ページ設定」画面の「ヘッダー」と「フッター」のボックスに表示されている "&u"  の文字列を削除して保存します。

Fire Fox (参考: Zen Cart Pro では管理画面利用のための推奨ブラウザを IE6.0以上としております)

「ファイル」>「ページ設定」
「ページ設定」画面の「余白とヘッダ/フッタ」タブを選択
すべての項目から「タイトル」「URL」をなくす

 

11. 定期的にチェックすべき項目

1 - この文書内に記載されているすべての項目が実行されているか。
2 - サイト上のファイルとデータベースのバックアップをきちんと取っているか。
3 - サーバーのエラーログを定期的に確認し、奇妙な怪しい動きがないかをチェックします。
サイト内に存在しない、ページへのリンクはないか
index.php の後ろに http が続くようなリンクがないか・・・など
4 - サーバー上のファイルを定期的に確認し、追加されたり置き換えられたファイルがないかをチェックします。
5 - サーバー業者様に、お使いのサーバーでは、外部の人間からの害を及ぼされることがないように、あるいは同じサーバーを利用している別のユーザーのサイトにセキュリティホールがあった場合などに、そこからの影響を受けることが無いように、どのようなセキュリティ保護のための手段が取られているかをおたずねください。
6 - もしセキュリティに関する何らかの保証が必要であれば、セキュリティコンサルタントとご契約なさり、定期的にサイトをチェックしてもらうようにしてください。

 

【サイトがハッキングされたようです! どうしたらよいですか?】

もし、自分のサイトが「ハッキングされた」とわかったら・・・
「ハッキング」のケースは様々で必ずしもご自身のサイトが原因ではなく、同じサーバーにホスティングしている別のアカウントのホームページに問題があって、そこから侵入されたのかもしれません。

ご利用中のホスティング業者様に連絡してください。おそらくホスティング業者様は、もっと詳しい情報を持っているかもしれませんし、他のユーザーへも注意を喚起する事が出来るでしょう。

1、サイトを「メンテナンス中」にする。
あるいは、.hataccess や index.php を変更してサイトへのアクセスが完全に出来ないようにする必要があるかもしれません。
※ 状況によっては、公開ディレクトリのフォルダ名を変えてしまう、あるいはすべてのファイルのアクセス権限を無くしてしまう・・・などの対応が必要な場合もあります。後で元に戻せなく成らないよう必ずホスティング業者様に対応方法をご確認ください。

2、管理画面 /admin のフォルダ名を変更して管理画面を容易に見つけられないようにする。

3、セキュリティパッチを適用する。

4、サイトの点検を行います。
  a) 追加されたファイルや変更されているファイルを探し出して、元に戻します。
b) 管理画面から行っている各種の設定を全てチェックして、変更されていないかどうかを確認します。
c) 管理画面から確認・変更できるモジュール等で利用する「パスワード」類(決済サービスへの接続用
パスワードなど)をすべて変更するようにします。
d) 顧客情報が流出した可能性がある場合には、その旨を該当者に連絡するなど正しく処理を行います。

※ こうしたケースに対応するためにも、普段よりバックアップを定期的にとっておく事をお勧めします。
バックアップがあれば、サイトのリカバリもはるかに楽に作業できるでしょう。

 

【アタックによる無駄な負荷を軽減するための修正】

過去において、zencart1.3.0 系で存在していた脆弱性の問題があります。すでにその問題は解決済みですが、今だにそのセキュリティホールが狙った攻撃が行われています。
他にも SQLインジェクションの試みはインターネット上で常に行われています。既知の問題に対してはすべて対応を行っていますので、これらの攻撃は Zencart に対しては無効ではありますが・・・わずらわしいだけではなく、サーバーに余計な負荷をかける原因にもなります。

1.3.x系のZencart (Zen Cart Pro 、ZenCartPro-R を含む)では、以下の変更を行う事で不正な動作をブロックします。

◆ /includes/application_top.php ファイルの最上部、一行目の "<?php". に続けて、2行目の部分に以下の内容を追加します。

/**
 * prevent hack attempts which waste CPU cycles
 */
$paramsToCheck = array('main_page', 'cPath', 'products_id', 'language', 'currency', 'action', 'manufacturers_id', 'pID', 'pid', 'reviews_id', 'filter_id', 'zenid', 'sort', 'number_of_uploads', 'notify', 'page_holder', 'chapter', 'alpha_filter_id', 'typefilter', 'disp_order', 'id', 'key', 'music_genre_id', 'record_company_id', 'set_session_login', 'faq_item', 'edit', 'delete', 'search_in_description', 'dfrom', 'pfrom', 'dto', 'pto', 'inc_subcat', 'payment_error', 'order', 'gv_no', 'pos', 'addr', 'error', 'count', 'error_message', 'info_message', 'cID', 'page');
$contaminated = false;
foreach($paramsToCheck as $key) {
  if (isset($_GET[$key]) && substr($_GET[$key], 0, 4) == 'http') {
    $contaminated = true;
    break;
  }
  if (isset($_GET[$key]) && strlen($_GET[$key]) > 43) {
    $contaminated = true;
  }
}
if ($contaminated || isset($_GET['autoLoadConfig']) || isset($_GET['mosConfig_absolute_path']) || isset($_FILES['GLOBALS']) || isset($_REQUEST['GLOBALS']) )
{
  header('HTTP/1.1 406 Not Acceptable');
  exit(0);
}

zencart.com でのオリジナルとなる記事>>http://tutorials.zen-cart.com/index.php?article=320

【※注意】
支払モジュールなどでエラーコードがURL内に反映されるような場合、エラー内容に日本語文字列が含まれるなどするとURLエンコードの結果、非常にURLが長くなってこのチェックに掛るようになる場合があります。
必要無ければURLには日本語文字列が入らない様にするか、この制限を外すなどの対応を行ってください。