30
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

EC-CUBE セキュリティチェックリスト

Last updated at Posted at 2020-01-22
1 / 62

内容は随時アップデートしています。ぜひストックしてください。


この資料は、公式に発表されたセキュリティチェックリストの補足です。


※マークは最優先でチェックすること


2系


※ data 以下のファイル、フォルダが公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/data など)に data フォルダが公開されていないかご確認ください。

もしくは、 EC-CUBEの URL と同階層(例: https://example.com/path/to/ec-cube の場合 https://example.com/path/to/data) に data フォルダが公開されていないかご確認ください。

data/Smarty/templates/default/site_frame.tpl などにアクセスし、ファイルの中身が表示されないことをご確認ください。


data 以下のファイルの中身が表示されてしまった場合

data フォルダに .htaccess というファイル名で、以下の内容を保存してください。

order allow,deny
deny from all

保存した後、ファイルの中身が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


install 以下のファイル、フォルダが存在するか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/install など)に install フォルダが存在するかご確認ください。


install フォルダが存在する場合

通常の運用では使用しないプログラムが含まれています。
install フォルダを削除してください。


test 以下のファイル、フォルダが存在するか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/test など)に test フォルダが存在するかご確認ください。


test フォルダが存在する場合

通常の運用では使用しないプログラムが含まれています。
test フォルダを削除してください。


tests 以下のファイル、フォルダが公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/tests など)に tests フォルダが存在するかご確認ください。


tests フォルダが存在する場合

通常の運用では使用しないプログラムが含まれています。
tests フォルダを削除してください。


管理画面の URL を変更した際に、標準の admin フォルダが残存していないか

管理画面の URL を標準の admin から変更した場合、 admin フォルダが残っていないことをご確認ください。


admin フォルダが残っている場合

使用しなくなったプログラムが含まれています。 admin を削除してください。


composer.jsonなど、開発用のファイルが存在するか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/composer.json など)に以下のファイルが存在するかご確認ください。

  • build.xml
  • phpunit.xml.dist
  • Gruntfile.js
  • composer.json
  • composer.lock
  • package.json
  • package-lock.json

開発用のファイルが存在する場合

通常の運用では使用しないプログラムが含まれています。
開発用のファイルを削除してください。


3系


※ app が公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/app など)に app フォルダが公開されていないかご確認ください。

app/console などにアクセスし、ファイルの中身が表示されないことをご確認ください。


※ app 以下のファイルが公開されている場合

app フォルダに .htaccess というファイル名で、以下の内容を保存してください。

order allow,deny
deny from all

保存した後、ファイルの中身が表示されないことをご確認ください
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


※ vendor が公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/vendor など)に vendor フォルダが公開されていないかご確認ください。

vendor/symfony/config/README.md などにアクセスし、ファイルの中身が表示されないことをご確認ください。

※ vendor 以下のファイルが公開されている場合

vendor フォルダに .htaccess というファイル名で、以下の内容を保存してください。

order allow,deny
deny from all

保存した後、ファイルの中身が表示されないことをご確認ください
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


install.php が存在するか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/install.php など)に install.php が存在するかご確認ください。


install.php が存在する場合

通常の運用では使用しないプログラムが含まれています。
install.php を削除してください。


composer.jsonなど、開発用のファイルが存在するか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/eccube_install.php など)に以下のファイルが存在するかご確認ください。

  • eccube_install.php
  • eccube_install.sh
  • composer.json
  • composer.lock
  • phpunit.xml.dist
  • web.config.sample

開発用のファイルが存在する場合

EC-CUBE をインストールしたフォルダの .htaccess ファイルに以下の内容を追加し、保存してください。

<FilesMatch "^composer|^COPYING|^\.env|^eccube_install|^Procfile|^app\.json|^gulpfile\.js|^package\.json|^package-lock\.json|web\.config|^Dockerfile|\.(ini|lock|dist|git|sh|bak|swp|env|twig|yml|yaml|dockerignore)$">
    order allow,deny
    deny from all
</FilesMatch>

保存した後、 開発用が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。

tests 以下のファイル、フォルダが公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/tests など)に tests フォルダが存在するかご確認ください。


tests フォルダが存在する場合

通常の運用では使用しないプログラムが含まれています。
tests フォルダを削除してください。


index_dev.php が存在するか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/index_dev.php など)に index_dev.php が存在するかご確認ください。


index_dev.php が存在する場合

開発用途で使用するプログラムが含まれています。
本番環境では、 index_dev.php を削除してください。


4系


※ var が公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/var など)に var フォルダが公開されていないかご確認ください。

var/cache/prod/annotations.map などにアクセスし、ファイルの中身が表示されないことをご確認ください。


※ var 以下のファイルが公開されている場合

var フォルダに .htaccess というファイル名で、以下の内容を保存してください。

order allow,deny
deny from all

保存した後、ファイルの中身が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


※ .env が公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/.env など)に .env ファイルが公開されていないか、ファイルの中身が表示されないことをご確認ください。


.env ファイルの中身が表示されてしまう場合

EC-CUBE をインストールしたフォルダの .htaccess ファイルに以下の内容を追加し、保存してください。

<FilesMatch "^composer|^COPYING|^\.env|^\.maintenance|^Procfile|^app\.json|^gulpfile\.js|^package\.json|^package-lock\.json|web\.config|^Dockerfile|\.(ini|lock|dist|git|sh|bak|swp|env|twig|yml|yaml|dockerignore)$">
    order allow,deny
    deny from all
</FilesMatch>

保存した後、 .env ファイルの中身が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


codeception が公開されていないか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/codeception など)に codeception フォルダが存在するかご確認ください。


codeception フォルダが存在する場合

通常の運用では使用しないプログラムが含まれています。
codeception フォルダを削除してください。


開発(dev)モードになっていないか

.env ファイルや、 .htaccess ファイルに設定されている APP_ENV の値が dev になっていないかご確認ください。


APP_ENV=dev になっている場合

開発用途で使用する設定になっています。
本番環境では、 APP_ENVprod に設定してください。


composer.jsonなど、開発用のファイルが存在するか

EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/composer.json など)に以下のファイルが存在するかご確認ください。

  • Dockerfile
  • composer.json
  • composer.lock
  • gulpfile.js
  • package-lock.json
  • package.json
  • symfony.lock
  • web.config

開発用のファイルが存在する場合

基本的に、上記 .env の中身が表示されない状態であれば、これら開発用のファイルも表示されないようになっています。
万が一表示されてしまう場合は、 EC-CUBE をインストールしたフォルダの .htaccess ファイルに以下の内容を追加し、保存してください。

<FilesMatch "^composer|^COPYING|^\.env|^\.maintenance|^Procfile|^app\.json|^gulpfile\.js|^package\.json|^package-lock\.json|web\.config|^Dockerfile|\.(ini|lock|dist|git|sh|bak|swp|env|twig|yml|yaml|dockerignore)$">
    order allow,deny
    deny from all
</FilesMatch>

保存した後、 開発用ファイルの中身が表示されないことをご確認ください。
それでも表示されてしまう場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


全バージョン共通


SSLが導入されているか

EC-CUBE に https:// からの URL でアクセスできるかご確認ください


https:// からの URL でアクセスできない場合

常時SSLの導入をご検討ください。
導入方法がわからない場合は、 こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


公表された脆弱性が修正されているか

EC-CUBE脆弱性リスト にアクセスし、対象バージョン のフォームにご利用の EC-CUBE のバージョンを入力し、脆弱性対応が済んでいるかご確認ください。

ご利用の EC-CUBE のバージョンは、管理画面のトップページでご確認可能です。

修正方法がよくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


管理画面のユーザーID/パスワードが推測されやすいものになっていないか

以下のような例に該当する場合は、推測されにくいユーザーID/パスワードに変更しましょう

  • ユーザーIDとパスワードが同じ
  • ユーザーIDが admin など推測されやすいもの
  • パスワードが8文字以下
  • パスワードが数字のみ、英字のみ

古いバージョンの EC-CUBE では、ユーザーIDに記号が使用できない場合があります。
修正方法がわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


管理画面が推測しやすい URL になっていないか

管理画面の URL が admin など推測しやすい URL になっていないことをご確認ください。
2.11 以降のバージョンでは、 管理画面から admin 以外に変更可能です。
また、 IP アドレスの制限などもセキュリティの強化には有効ですので、併わせてご検討ください。


パーミッション777のファイル、フォルダが存在しないか

パーミッションが 777 となっているファイル、フォルダが存在しないことをご確認ください


パーミッション777のファイル、フォルダが存在する場合

ファイルは 604、 フォルダは 705 など、ご利用のサーバーでの適切なパーミッションに変更してください。

テンプレートや、画像フォルダなど、Webサーバーから書き込みが必要な場合は、ファイル: 606、フォルダ: 707など、書き込み許可が必要な場合があります。
この場合は、セキュリティのリスクが向上しますのでご注意ください。


パーミッション666のファイルが存在しないか

パーミッションが 666 となっているファイルが存在しないことをご確認ください


パーミッション666のファイルが存在する場合

ファイルは 604 など、ご利用のサーバーでの適切なパーミッションに変更してください。

テンプレートなど、Webサーバーから書き込みが必要な場合は、606 など、書き込み許可が必要な場合があります。
この場合は、セキュリティのリスクが向上しますのでご注意ください。


API が有効になっていないか

2系の場合は、EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/api など)にアクセスし、ページが見つかりません もしくは、 API機能が無効です。 と表示されることをご確認ください。
「API機能が無効です。」と表示する場合でも、完全に削除してしまった方が安全です。
html/api フォルダを完全に削除してください。

3系の場合は、 EC-CUBEのURL直下(例: https://example.com/path/to/ec-cube/api/v0/product など)にアクセスし、 ページが見つかりません と表示されることをご確認ください。


API が有効になっている場合

適切にアクセス制限がかかっているかご確認ください。
よくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


html を別のフォルダ名(www, public_html など)に変更されていないか

サーバーによっては、 EC-CUBE 標準の公開フォルダである html が使用できない場合があります。
html 以外のフォルダ名に変更されている場合は、前出の2系、3系、4系のチェックリストを今一度ご確認ください。


user_data 以下に CSV ファイルが存在しないか

user_data フォルダ以下に CSV ファイルが存在しないかご確認ください。
存在する場合は削除してください。


upload 以下に CSV ファイルが存在しないか

upload フォルダ以下に CSV ファイルが存在しないかご確認ください。
存在する場合は削除してください。


他の CMS と同居している場合, バージョン(本体, プラグイン)は最新か

WordPress など、他の CMS を同時にインストールしている場合、最新バージョンが導入されているかご確認ください。
最新バージョンでは無い場合は、最新バージョンにバージョンアップしてください。


他のフリーCGIを使用していないか

フリーで配布されている CGI を使用していないかご確認ください。
EC-CUBEは機密情報を扱いますので、フリーで配布されている CGI との同時利用はおすすめしません。


独自テンプレートでエスケープ漏れなど無いか

テンプレートを独自にカスタマイズされている場合、フォームの input タグなどにエスケープ漏れが無いかご確認ください。

特に2系の場合は、 value 属性に h が付与されていることをご確認ください。

<!-- value に h が付与されているのを確認 -->
<input type="text" name="<!--{$key1}-->" value="<!--{$arrForm[$key1].value|h}-->"  />

独自カスタマイズ, プラグインで eval を使用している箇所は無いか

独自カスタマイズ、プラグインのソースを検索し、 eval 関数を使用している箇所は無いかご確認ください。

eval 関数の使用は推奨しません。
よくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


独自カスタマイズ, プラグインで serialize/unserialize を使用している箇所は無いか

独自カスタマイズ、プラグインのソースを検索し、 serialize/unserialize 関数を使用している箇所は無いかご確認ください。

serialize/unserialize 関数の使用は推奨しません。
よくわからない場合は、こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。


独自カスタマイズ, プラグインで SQL を実行する際, プレースホルダを使用しているか

独自カスタマイズ、プラグインのソースを検索し、適切にプレースホルダを使用しているかご確認ください。

以下のように変数を直接 SQL に渡している場合は要注意です

$sql = "SELECT * FROM dtb_products WHERE product_id = '".$product_id."';";

ここに書いてあることがよくわからない場合は

こちらのプロフィール にある SNS や、メールアドレス宛までお気軽にご連絡ください。

こちらもあわせてご覧ください


参考

パーミッション修正方法

666 のファイルを検索

find . -type f -perm 666

604 に変更

find . -type f -perm 666 -print0 | xargs -0 chmod 604

777 のディレクトリを検索

find . -type d -perm 777

705 に変更

find . -type d -perm 777 -print0 | xargs -0 chmod 705`

TODO

30
35
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
30
35

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?