Admin領域へのIPアドレスによるアクセス制限
cruel > Admin領域へのIPアドレスによるアクセス制限 @ 2011/2/27 0:06 |
---|
はじめまして。
投稿する場所に迷ったのですが、簡単なハック(とも言えない内容 ですが……) を行いましたので、こちらに書き込みいたします。 クライアントより、Admin領域には特定のIPアドレスからのみアク セス許可したいとの依頼があり、.htaccess 等では解決しません でしたので、本体に手を入れさせていただきました。 ・BaserCMS/baser/controllers/users_controller.php
行を
とし、認証部分を以下のようにしました。
上記書き換えで問題なく制限ができているようです。 こちらに書き込みいたしましたのは、もし同様の課題をお持ちの方が おられたら、という参考のためと、バージョンアップの度に毎回書き 換えるのも書き換え忘れなどが発生する可能性もございますので、標 準の機能やセキュリティ強化プラグインとして、実装していただけれ ばありがたいなあという、ご要望も兼ねてのものとなります。 自分で勉強するべきなのですが、なかなかゼロからプラグイン開発が できるスキルもなく、虫のいい話で申し訳ないのですが、ご検討いた だけるとありがたく存じます。 |
yosyos > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/2/27 9:38 |
---|
cruel さん
はじめまして。 私が管理画面にIP制限やBasic認証を置きたい場合、htaccessに記述しているので ご参考までに。 (あくまでディレクトリ構成をbasercmsの基本構成に習っている場合の対処法ですが) /app/webroot/以下にadminディレクトリを作ります。 ↓こうなります /app/webroot/admin/ adminディレクトリの中に.htaccessを置きます。 .htaccessには以下のように書きます。
私の場合はこれでうまくいっているので、よろしければお試しください。 (Basic認証やhtaccessの記述方法は、ここではご説明できないので検索してください。) BaserCMSのバージョン:1.6.9.1 レンタルサーバー名:独自 さくら(専用SV) ロリポップ heteml 等 スマートURLの利用:ON 設置フォルダ:ドキュメントルート(vhost含) 利用しているデータベース:MySQL OSの種類:割愛 PHPのバージョン:割愛 データベース種類・バージョン:割愛 |
cruel > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/2/27 23:03 |
---|
yosyos さま
早速のアドバイス、誠にありがとうございます。 スマートURLがオンの環境ですと、.htaccessで制限が可能なのですね。 CakePHPのMVCモデル等の動きがよく分かっておりませんでしたので、大変 勉強になりました。 ただ、残念なことに今回利用するクライアントのサーバーは mod_rewrite に対応しておらず、スマートURLが利用できない環境でして、検証してみた ところ、お教えいただいた対策では制限できないようでした。私のサーバー 環境の説明が不足しており、申し訳ございませんでした。 現在のサーバー環境等は、以下の通りです。 BaserCMSのバージョン : 1.6.9.1 サーバー名 : クライアントのサーバー(apache2.0.x) スマートURLの利用 : オフ(mod_rewrite 利用不可) 設置フォルダ : サブフォルダ データベース : SQLite3 OSの種類 : Linux Kernel 2.6x PHPのバージョン : 5.2.6 mod_rewrite が利用不可能な環境では、現状コードに手を入れる方法 しかないのでしょうか・・・。 |
yosyos > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/2/28 22:04 |
---|
cruel さん
スマートURLが使えない環境で運用したことがなかったので お門違いな回答をしてしまったようで申し訳ないです。 私ならどうやってしのぐかを少し考えてみました。 模範解答には程遠いと思いますが・・・ 1.baser/controllers/users_controller.php を app/controllers/users_controller.phpにコピーしてcruelさんの処置を施す。 baserをバージョンUPすることを考えて、baser/以下のソースに手を加えないことを考えます。 そのために、app/に移動してコントローラーをオーバーライドするようにします。 但し、バージョンUPをするとコピーしたソースを更新(マージ)しなくてはならないので、結果的には同じことかなと・・・ 2.app/config/bootstrap.phpに処置を加える。 本来ならばapp/controllers/app_controller.phpにフックを仕込みたいところですが baser/controllers/app_controller.phpがあるので、できませんでした。 なので、baser/controllers/app_controller.php実行以前に仕込める場所はと考えると app/config/以下の何かか。 cakePHP 及び baserCMS の規範に沿っていないのですが bootstrap.php仕込みの方法で考えました。 例えば以下のような感じで
どちらもスマートじゃないのですが、やむを得ずの場合、私ならこうやっちゃうだろうな・・・ という回答でしかないのですがいかがでしょうか? ※この記事をご覧の方で同様の事案に対応されている人がいましたら、私も教えて頂きたいです。 |
ryuring > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/1 0:48 |
---|
こんばんは。
BaserCMSのアップデートに耐えうるようにカスタマイズするというのが結構悩みどころなのですが、 今回の要件であれば、BaserCMS のプラグインフックという仕組みを使えば コアには何も手を加えずに beforeFilter をフックできます。 http://basercms.net/manuals/programmers/5.html プラグインといっても1ファイルで簡単に実装できます。 次のような構成にし、クラスを一個作ります。 (プラグイン名は適当にadmin_permissionとしました) ■ フォルダ構成
■ admin_permission_hook.php
とりあえず、プラグインフックの仕組みだけお伝えしたかったので、許可するIPはクラスにハードコーディングしちゃってます。 許可しないIPからのアクセスの場合、NOT FOUNDとするようにしているのですが、その際に、$controller->params['admin'] が有効のまま呼び出されてしまうので、コントローラーがCakeErrorの場合にはチェックしないようにしてます。 利用するには、管理画面のプラグイン一覧で有効にする必要がありますのでご注意ください。 あと、これをプラグインとして配布するには、許可IPを管理画面で登録できるようにしたりする必要がありますね。 みんなでBaserCMSのプラグイン開発で盛り上がっていければ嬉しいですね〜 Twitter:@ryuring |
cruel > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/3 4:18 |
---|
ご返信が遅くなりまして申し訳ございません。本日動作の検証を行いましたので、
ご報告させていただきます。 yosyos さま とんでもございません。.htaccess での制限が可能ということが分かっただけ でも大変な収穫でした。スマートURLが有効な環境でしたら、webroot内にフォル ダを作れば .htaccess が有効になるという考えがございませんでしたので、 大変勉強になりました。 また、フックする部分に関しましてもご考察いただき、ありがとうございました。 bootstrap.php の 配置パターン コメントの直下に追加することで、動作確認 できました。私のものよりこちらの方が、ページトップに遷移するため遙かに スマートでいいですね。(クライアントへのデモページは、こちらのパターンにて 開示させていただきます(^^;) ryuring さま プラグインの作成方法の御指南、誠にありがとうございます。1ファイルにて プラグインとして動作するのですね。たくさんのファイルを用意しないといけ ないものと考えておりましたため、目から鱗でした。 ただ、お教えいただいたプラグインでは、IPアドレスでの制限がうまくかから ないようでした。ご掲示いただいた通りのフォルダ構成でファイルを作成し、 プラグインとしては登録でき、動作しているようなのですが、許可したIPアド レス以外からも管理者エリアに入れるようです。 私のミスの可能性が大かと存じますが、ご確認いただければ幸いです。私の テスト環境は以下の通りです。 BaserCMSのバージョン : 1.6.9.1(既存の全パッチ済) サーバー名 : apache2.2x スマートURLの利用 : オフ 設置フォルダ : サブフォルダ データベース : CSV OSの種類 : CentOS 5.5 PHPのバージョン : 5.3.5 よろしくお願い申し上げます。 |
ryuring > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/3 5:13 |
---|
ごめんなさい、本体に影響を与えないプラグインでの簡単な実装例をヒントとしてお伝えしたかっただけなので動作検証は全く行ってませんでした。
フック処理の中身は色々書き方があると思いますので色々試して頂ければとおもいます。 どなたかプラグインとして作ってくれたら嬉しいなあ Twitter:@ryuring |
cruel > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/3 5:38 |
---|
ryuring さま
サンプルコードだった旨、承りました。私の方でもこのコードを参考に、動作 するプラグイン的な物が作れないかどうか、テストしてみます。この度は誠に ありがとうございました。 # ただ、そのクライアントにBaserCMSを導入するという話自体が宙に浮きかけて # おりまして、作っても徒労となる可能性も出てきているのが憂鬱ではありますが # ・・・orz |
yosyos > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/3 23:47 |
---|
cruel さん
動作されたようで何よりです。 クライアントのお話、上手くランディングされることを祈るばかりです。 ryuring さん BaserCMSのプラグインフックは盲点でした。。。 ご指南ありがとうございました。 IPブロック・Basic認証・Digest認証を絡めた形でプラグインを妄想してみたのですが 現状手が回らず、すぐに着手はできなそうです。 CakePHP Securityコンポーネントを使った方向で考えてはいますが... 嬉しいことか悲しいことかこんな時に限って忙しくなってます… |
ryuring > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/4 0:30 |
---|
> cruel さん
先日書いたプラグインを実際に試したのですが、こちらの環境では正常動作しました。 下記のコードで実際のIPの値を確認してみてください。in_arrayでチェックをかけているだけなのでデバッグは簡単だと思います。
> yosyos さん 忙しい事は何よりです!是非本業を頑張ってください! Twitter:@ryuring |