CMSインストール時のセキュリティガイドライン
Githubに移設しました。https://github.com/babagump3/CMS-Security-Policy
下記の情報は古いものです。
2015-12-15
CMSの対策(WordPress)
認証強化
- ユーザー名に「admin」を使用しない
- パスワードは文字列をランダムに生成したものを使用する
- (設置できる場合)「SiteGuard WP Plugin」の導入と下記の設定
- 管理ページアクセス制限
- ログインページ変更
- 画像認証
- ログインロック
- フェールワンス
ファイルのパーミッション
ファイルのパーミッションを下記の通り設定する
- HTML、CSS、JS、画像 → 604
- PHPスクリプト → 600
- CGIスクリプト → 700
- ディレクトリ → 701
サーバーの仕様によってはこの通りではない
テーブル名のプレフィックスをデフォルトのものから変更する
.htaccess等で wp-config.php をアクセス制限する
.htaccessでやるならこうする。
# protect config.php
<files wp-config.php>
order allow,deny
deny from all
</files>
アプリケーションとプラグインの自動アップデートの確認
アプリケーションとプラグインの自動アップデートを設定することで常に最新の状態に保ててるのですが、プラグインの対応状況によっては最悪サイトが動かなくなることがあるかもしれません。ですのでセキュリティ的な観点からは残念ですが、自動アップデートしない選択も考えられます。自動アップデートしたいということになりますと、バックアップと管理のランニングコストがかかってきます。
WordPressをインストールするディレクトリ名
予測されにくい、一般的でないディレクトリ名とする。 とりあえず「wpapp」で統一。
CMSの対策(MovableType)
認証強化
- ユーザー名に「admin」を使用しない
- パスワードは文字列をランダムに生成したものを使用する
- ログインロック(デフォルトで搭載しています)
使わないCGIスクリプトの権限を変える
利用状況によっては、必要としないスクリプトがあります。そういった CGI スクリプトには、実行権限を与えないようにすることで安全性を高めることができます。
- Movable Type のコメント機能を利用していない → mt-comments.cgi の実行権限を無くす
- トラックバックを受け付けていない → mt-tb.cgi の実行権限を無くす
- Movable Type Data API を利用していない → mt-data-api.cgi の実行権限を無くす
- ログフィード機能を利用していない → mt-feed.cgi の実行権限を無くす
- 公開サイト側で Movable Type の検索機能を利用していない → mt-search.cgi, mt-ftsearch.cgi の実行権限を無くす
- XMLRPC を利用して記事やウェブページの投稿をしていない → mt-xmlrpc.cgi の実行権限を無くす
- Atom API を利用して記事やウェブページの投稿をしていない → mt-atom.cgi の実行権限を無くす
- コミュニティ機能を利用していない → mt-cp.cgi の実行権限を無くす
インストール後は利用しない CGI スクリプト
- mt-wizard.cgi
- mt-upgrade.cgi(ただし、Movable Type や プラグインのアップグレード時に必要です。)
ファイルの名称変更
CGI スクリプト名を予測しにくい名前に変更することで、第三者からの不正アクセスのリスクを低減できます。スクリプト名は、mt-config.cgi に設定する環境変数で変更できます。
「mt.cgi」
→ AdminScript hoge.cgi「mt-upgrade.cgi」
→ UpgradeScript fuga.cgi
管理画面の保護
- 管理画面に BASIC 認証をかける
- 管理画面を SSL 通信にする(※)
※サーバー環境に制限があります。
Data API の設定
ウェブサイト・ブログ単位で、Data API のアクセスを禁止する
各ウェブサイトまたは、ブログ単位で Data API のアクセスを禁止することができます(バージョン 6.1 以降)。禁止されている場合でも、認証されたシステム管理者には Data API のアクセスが行えます。詳しくは、ドキュメントをご参照ください。
システム全体で、Data API のアクセスを禁止する
ウェブサイトやブログ単位で設定するのと同様に、システム全体として Data API によるアクセスを禁止するように設定することができます。この場合も、認証されたシステム管理者には Data API のアクセスが行えます。詳しくは、ドキュメントをご参照ください。
オブジェクト単位で、取得出来る項目を制限する
Data API で取得できる項目を制限するには、DisableResourceField 環境変数を設定します。詳しくは、環境変数のドキュメントをご参照ください。
当社で行わないこと
サーバー側のソフトウェア・アップデート
OS、Apacheなどのサーバー、SSL/TLS、PHP・Perlなどのミドルウェアなど...のアップデートはホスティング会社にまかせる
CMSを使用する端末の対策
端末のソフトウェアアップデートとウィルス対策はCMSを使用する端末ごとに行ってください。サーバー/アプリケーションばかり強固にしていてもパスワードが漏えいしてしまえば元も子もありません。
運用上の対策
- アカウントを使いまわさない
- 他で使っているパスワードを使わない
- パスワードは強固なものを設定する
依頼を受けて対応すること
- CMSアプリケーションのアップデート
制作上の対策
- FTPを使用せずSFTP、SCPなどを使用する。
- FTPツールにパスワードを保存しない。
- ブラウザにパスワードを保存しない。