内容は随時アップデートしています。ぜひストックしてください。
この資料は、公式に発表されたセキュリティチェックリストの補足です。
- 【初心者向け】EC-CUBEを安全運用・セキュリティ対策講座 | EC-CUBE名古屋 vol.74 にて詳細をお話ししました。
- 2〜4系のセキュリティについて! EC-CUBE東京ユーザグループ開発者向け勉強会2月 にて詳細お話ししました。
- EC-CUBEオフィシャルサイトにセキュリティチェックの特設ページができました
- 2.11〜2.13系向けのセキュリティチェックモジュールがリリースされました
※マークは最優先でチェックすること
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_ENV
を prod に設定してください。
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
あと、セキュリティの面から言うと、デザイン管理画面は使わない方がいいです。
— 🍣大河内健太郎🕊💉 (@nanasess) January 9, 2020
Webサーバーの権限で、テンプレートに書き込み許可されているのはリスクになりえます。
VPS やクラウドをお使いの方は、 デザイン管理画面を使用できなくしてしまって、Webサーバーから書き込めないようにした方が安全
公式から出ているチェックリストに、
— 🍣大河内健太郎🕊💉 (@nanasess) January 9, 2020
> 購入確認画面等に覚えのない JavaScript が設置されていないか
ってあるけど、 jQuery に偽装したファイルが設置されていたこともあります。
難読化されていて、プロでも一見見分けがつきません。
不安な方はお気軽にご相談くださいhttps://t.co/YAzZJkfGX4
tpl ファイルを Webサーバーからは読み取り専用のパーミッション(604)にして、デザイン管理画面を使わない運用にするのも効果あると思います。
— 🍣大河内健太郎🕊💉 (@nanasess) January 14, 2020
この場合、テンプレートの修正は FTP や SSH など Webサーバーとは別のユーザー権限で行います
WordPress など、他の CMS と同居している場合は、2系に関わらず3系、4系でも注意が必要です。
— 🍣大河内健太郎🕊💉 (@nanasess) January 14, 2020
今後、イタチごっこになり標的が変わる可能性があります。