質問: ある企業に下記のサイトを提供予定です。 ・ユーザー向けWEBサイト(例:www.hoge.com) ・ユーザーWEBサイトの管理サイト(例:www.hoge.com/admin/) 下記のような状況で、ユーザーサイトと管理サイトのドメインは分けるべきでしょうか? ユーザー向けWEBサイトには企業のお客様が訪問して、商品を買ったりします。 ユーザーWEBサイトの管理サイトは、企業の管理者が利用し、 商品ページの公開・非公開、価格の変更などの制御や ユーザーのアクセス数の確認などレポーティングに利用します。 URLは例のとおりで、管理者サイト(例:www.hoge.com/admin/)で ユーザーサイト(例:www.hoge.com)と同じドメインです。 セキュリティーを考慮して、管理者サイトのベーシック認証を付けたりしようと思っています。 上記のような状況ですが、ユーザーサイトと管理サイトをドメイン下に設置することで セキュリティーなどデメリットやアドバイスがあれば教えていただけないでしょうか? 思い付きですが、 ・管理サイト(たとえば、/admin/以下)に企業からしかアクセスできないような IPアドレス制限をかける。(技術的に可能かどうか教えていただきたいです。) ・URLはたとえば、www.hoge.com/admin/と分かりやすいものでなく、 外部に推測されにくいURL (たとえば、www.hoge.com/ireie2343/などにした方がいい などが適切かどうか、それ以前にドメインが同じなのは言語同断なのかも含め、 アドバイスいただければ幸いです。 私も提供先の企業側も知識があまりないため、お知恵を借りれればありがたいです。 よろしくお願いいたします。
回答: 同じサーバの同じドメイン上に管理画面を置いた場合のリスクは、第三者が管理画面(少なくともログイン画面に)にアクセスしやすくなってしまうと言うことです。もし、管理画面へ誰でもログインできるような脆弱性があった(どんなに慎重に作成しても脆弱性が存在する可能性を完全に0にはできません)場合は、悪意ある第三者がログインして、情報の盗み出しや改竄等がされてしまう可能性があります。 たぶん、上のことは認識済みかと思います。特にWordPressやEC-CUBEのようなメジャーなWebアプリを用いている場合、デフォルトの管理画面のURLが誰でも知っているものになるため、脆弱性が発見され次第、世界中からログインされる可能性があります。 第1の方法として、それを防ぐために、ドメインを変える、管理画面のURLを/admin/など類推されるもの以外に変える、はある程度有効だと思います。ただ、この方法は数打ちゃ当たる方式で攻撃するような悪意がある第三者には有効ですが、その企業を標的にしている場合は、どこからしか情報が漏れて、管理画面のURLを知られてしまいます。無いよりはマシかも程度の対策です。 第2の方法として、上記に加えて、Apache上でアクセス制限(管理者が所属する企業のIPアドレス以外からはアクセスできないようにするということ、URL単位で設定できますので/adamin/の場合でも可能です)した場合ですが、これは極めて有効です。この制限を打ち破るにはApacheの脆弱性を打ち破るしかありません。逆に言えば、Apacheにアクセス制限に対する脆弱性があった場合は、同じように入り込まれてしまう可能性があります。ただ、もっと留意すべきなのはApacheの設定ミスです。一部だけ制限すると言った場合は全体を制限するよりも設定が複雑になり、設定ミスで制限がかかっていない状態になっていたという場合があります。 第3の方法として、さらに制限をするため、管理サイトは全く別のサーバに持っていくという物です。管理サイトはiptablesと言ったファイアウォールレベルでアクセス制限をかけ、第三者に接続することすら許さないようにします。Apache側も制限をかけておけば、「iptablesによる制限」+「Apacheの設定による制限」+「管理画面のログインによる制限」と3重の壁で守られるため、一つや二つの脆弱性で突破される可能性を限りなく低くすることができます。この方法の問題は、サーバをもう一つ立てることになるため、費用がかかるという点です。 費用対効果を考えて、どこまでするかになると思います。ただ、「第1の方法」は守っているように見えて余りそうではありません。近年は、企業にとって標的型攻撃の方が問題であり、そういった場合は「第1の方法」は防御の体をなしているとは言えません。むしろ、システムの改修や管理が複雑になるなどデメリットが発生する可能性があります。「第1の方法」は簡単にできるのであればする程度で、「第2の方法」を中心に据えた方が良いと思います。そして、予算に余裕があれば、「第3の方法」を検討してみてください。