タグ検索:Webセキュリティ

a-blog cmsはプロフェッショナル版以上のライセンスで、cmsから静的サイト運用に必要なファイルを丸ごと書き出しする「静的書き出し」機能を利用することが出来ます。

・a-blog cms オフィシャルサイト サイトを静的書き出しする
https://developer.a-blogcms.jp/document/operation/entry-2856.html

この静的書き出しは、基本的なa-blog cmsの運用方法(サーバでcmsのプログラムが動作している状態)とは違い、htmlなどを静的なファイルとして書き出すため、セキュリティ向上、高速な表示、負荷軽減など大きなメリットがあります。しかしその反面、更新をする際に「cmsを更新→静的書き出し→テストサーバで確認→本サーバへアップロード」の様に、サイト更新時の手順が増えます。

いくつかコツがあるので、事前に静的書き出しの仕様をよく把握することが大切となります。思い通りに書き出されているかを確認する為に、cmsを設置するサーバ、書き出したファイルを確認するテストサーバ、公開用の本サーバの3つの環境が必要となります。

また、ブログ単位で書き出される仕様のため、更新頻度やコンテンツのボリュームを考慮して、どの様にブログ構成を立てるかが大切になります。サーバのスペックにより一度に書き出しが出来るエントリー数にも限界がありますので、あまりに多い場合は、ブログを分けたり、jsで処理するなど配慮する必要があります。

作り手としてはサーバでシステムが動いていた方が構築も運用も楽ですが、世の中で不正アクセス、サイトへの攻撃などの被害が増えている現状も考えると、今後小規模webサイトでも静的書き出しがサイト構築の方法として重要になってくるとは思います。この点、a-blog cmsでは静的書き出しが標準機能として設けられていますので非常に心強いです。

サーバによっては環境をうまく使い分けることで、静的書き出しから本番アップまでの流れを半自動化出来るものがあるかもしれません。このあたりは今後模索していきたいところです。


先日参加したa-blog cmsの日(a-blog cmsの勉強会)でコンテンツセキュリティポリシー(CSP)の話がありました。
とても参考になるものでしたのでブログに残しておこうと思います。

コンテンツセキュリティポリシーを簡単に説明すると、設定されたドメイン環境以外のデータは無視することで、未知なる脅威からサイトを守るというものです。改ざんにあった際にも、コンテンツセキュリティポリシーを設定しておく事で、外部ファイルが実行できず被害を最小限に食い止めることが可能かもしれません。

a-blog cmsでは、「private/config.system.yaml」に設定をすることで実装可能ということでした。

//デフォルトはoff
content_security_policy : off # default-src 'self'; script-src 'self' | off

例えば、サイトのドメインのみデータの実行が可能にするためには下記の様に設定します。

//すべてのコンテンツをサイト自身のドメイン (サブドメインを除く) から取得
content_security_policy : default-src 'self'

この場合、他サイトのデータは実行されなくなりますので、別のサーバに置かれているjsや画像などは全て無視されます。

読み込み先にドメインを設定すれば、サイトのドメインに加え指定されたドメインの画像やjsなども実行することが可能になります。

//コンテンツをサイト自身のドメインと設定されたドメイン(sample-hp.com)から取得
content_security_policy : default-src 'self' *.sample-hp.com

例ではサイトのドメインに加え、外部ドメイン(*.sample-hp.com)のデータが読み込める様になりました。

また、SSLを指定することで暗号化した通信のみを許可する事も出来るようです。

//コンテンツをサイト自身のドメインと設定されたドメイン(www.sample-hp.com)からSSLでのみ取得
content_security_policy : default-src 'self' https://www.sample-hp.com

細かい設定は要件に合わせて追加していく様で、「script-src」「style-src」「img-src」などで、読み込むファイルの種類ごとに指定をすることも出来ます。

ただし、今どきのサイトの多くがSNSや地図APIなど外部サイトの機能に依存しているので、すべて設定するのは結構大変かもしれません。また、jsのインライン記述には基本的には対応しておらず、どうしてもインラインで書かなくてはならない場合は、ハッシュをつけるなどで対応する様です。

実際の作業としては、まずサイトのドメインだけを許可し、あとはソースやコンソールなどで表示される情報を確認しながら、読み込み可能なドメインを追加していく感じになると思います。
細かく複数のファイルを読み込むものも多いので、それなりの工数はかかりそうな気がしますが、これでリスクを減らせて安心できるなら、頑張って実装するのも良いかもしれません。


先日の「簡単に出来る a-blog cms のセキュリティ強化方法」の時にも少し出ましたが、今回はWAF(Web Application Firewall)の話です。

最近はクラウド型や、サーバに付属で提供されているものが多く、手軽に使えるものがありますので、出来るだけ多くのサイトに導入したいと思っています。
しかしその反面、CMSでは更新時に誤検知してエラーになるなど、運用でネックになる場合があります。まだサイト運営者が把握していれば良いんですが、知識がない方だとトラブルの元にもなったり…。

そんな悩ましいWAFですが、サーバによっては大丈夫だったりもしますので、a-blog cmsで使えるところを見極めたい。

まだXSERVERとCPIのWAFしか使ったことがないのですが、今までの経験ではXSERVER(X10系)は誤検知は少なく、CPI(シェアードプランACE01)は頻繁にエラーが出る印象でした(個人的な見解です)

ということで、CPI(シェアードプランACE01)を使う時は、WAFはOFFで考えていましたが、今回調べる中でCPIのWAF設定方法(CPIオンラインヘルプ:特定シグネチャの除外方法)をオフィシャルのヘルプで見つけましたので、メモしておきます。

方法はとても簡単で、.htaccessに記述するだけです。

#特定のIPを指定して除外する方法
<IfModule siteguard_module>
SiteGuard_User_ExcludeSig ip(xxx.xxx.xxx.xxx)
</IfModule>

「ip(xxx.xxx.xxx.xxx)」のxに作業環境のIPを入れます。
ここで設定したIPの時にだけWAFをOFFにしますので、IPは固定である必要があります。
複数IPの場合は3行目の内容「SiteGuard_User_ExcludeSig ip(xxx.xxx.xxx.xxx)」のIPを変えて、下に1行追加すれば大丈夫みたいです。
決められた環境からしか更新しない場合で、外部からの投稿がないサイトはこれでOKな気がします。

また、検出されたシグネチャ毎に除外を設定する方法もある様です。

#特定のシグネチャを指定して除外する方法
<IfModule siteguard_module>
SiteGuard_User_ExcludeSig signature1,signature2
</IfModule>

この場合、検出されなくなる反面、この部分は機能しませんのでセキュリティ面からみると微妙ですよね…。
サイトに外部から投稿されるものがあり、仕方なく一部制限を緩和するといった感じでしょうか。

a-blog cmsでWAF搭載の他サーバを使う機会があれば、また調べてみようと思います。
WAFはクラウドサービスも沢山ありますし、まだまだ勉強中なので、また何か良い情報があったら書きたいと思います。


最近ではWebサイトに対する不正アクセスや改ざんなど、悪意のある者による攻撃・被害が増加しています。
そこで専門的な技術者ではなくても簡単にできる、a-blog cms 版のセキュリティを強化する方法を考えてみました。

(1)ログイン画面のアドレスを変更

a-blog cms にはログイン画面のアドレスを変更する機能が備わっています。
初期設定のまま運用されている場合は機能を活用しましょう。

//config.server.php
define('LOGIN_SEGMENT', 'ログイン画面のアドレスを設定');

(2)ユーザーのログイン情報を複雑なものに変更

簡単に推測されるようなログイン情報(ユーザーID、パスワード)は、悪意のある者に簡単にログインされてしまう可能性があります。

もちろんパスワードも推測不能な桁数の多いものに変更をおすすめします。
最新の a-blog cms では「パスワードポリシー」の設定で、パスワードの命名ルールを決めることが出来ますので、設定しておくと複数ユーザーの運用時に安心して利用できます。

また、ページの内容によっては、エントリーをポストしたユーザーの「名前」が表示されている場合がありますが、「名前」が「ユーザーID」と同じ設定内容になっている場合は、必ずどちらかの情報を変更をおすすめします。

//管理ページ
コンフィグ > 機能設定「パスワードポリシー」

(3)SSL対応で通信データの暗号化

通信する情報が暗号化されずそのままでは、いつか悪意のある者に情報が盗まれてしまうかもしれません。
SSL対応しWebサイト上でやり取りするデータの暗号化をおすすめします。

SSLの導入はすでに一般化しており、安価(サーバによっては無料なところも)なサービスも増えています。
ぜひSSLを導入して安心安全なWebサイト運営を行いましょう。

なお、a-blog cms の完全SSL対応は、ver2.6.1.3以上になりますので、それ以下のバージョンをご利用の方は、まずは a-blog cms のバージョンアップからの対応になります。

(4)a-blog cms のバージョンアップ

本当はこれを一番最初に書いても良かったですね…。

どのようなシステムでも、最新版は数多くのバグフィックスがされていますので、古いシステムをそのまま使っている場合は、ぜひ最新バージョンへのバージョンアップをご検討ください。

もちろん最新バージョンには追加された機能が多数ありますので、セキュリティ向上以外にもバージョンアップするメリットは必ずあります。

(5)怪しいIPからログイン画面へのアクセスを遮断する

ログイン画面に海外IPなどから怪しいアクセスが増加した場合は、リスクを減らすために「アクセス設定」のログイン拒否リストにIPを追加することをおすすめします。

//管理ページ
コンフィグ > アクセス設定「ログイン 拒否リスト」
※CIDR記法で入力(例:a.b.c.d/32)
※指定されたIPアドレスからのアクセスに限りログインが拒否されるようになります。

(6)ログイン画面にbasic認証をかける

basic認証を使いログイン画面を2段階認証にします。

a-blog cms はテーマの継承という機能がありますので、a-blog cms を設置した階層に、ログイン画面のアドレスに設定した値と同じ名称のディレクトリを作ります。
あとは作ったディレクトリに.htaccessでbasic認証をかけるだけで、ログイン画面が2段階認証になります。

なお、.htaccessの設定はサーバの仕様によりますので、自己責任でお試しください。
また、basic認証を利用する場合は、SSL環境での運用をおすすめしています。

(7)WAFの導入

WAF(Web Application Firewall)を導入し、Webサイトを攻撃から保護します。
WAFは一般的に高価なものですが、最近ではXSERVERやCPIなど、WAFの機能を無料で提供しているサーバもあります。

ただし、WAFを導入すると a-blog cms の更新時に検知・ブロックし正常に動作しない場合がありますので、運用に合わせて設定をおこなえたり、機能のON・OFFができるものがおすすめです。

最後に

a-blog cms 自体はしっかりセキュリティに配慮された素晴らしいシステムですが、Webサイトの制作方法や運用次第でリスクを増やしてしまう場合があります。今回上げた幾つかのポイントは、少ないコストで簡単に強化できる内容が多いので、気になる方は是非お試しください。

弊社のお客様には別途ご連絡させていただく予定ですが、もし何か気になる内容がございましたら、お気軽に担当までご相談ください。