Admin領域へのIPアドレスによるアクセス制限
cruel > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/7 22:58 |
---|
ryuring さま
たびたびお手数をお掛けしまして申し訳ありませんでした。おかげさまで、 ご掲示くださったコードにて動作いたしました。誠にありがとうございました。 PHPは5.2までと5.3以降では、挙動がかなり違うと聞いたことはありましたが、 細かいところでもだいぶ変わっているのですね。似非コーダーのため、この辺りの 事情には全く詳しくなかったのですが、真面目に勉強しないといけないなと思い 知りました・・・。 このプラグインをセッティングして、クライアントに再度提案をしてみたいと思い ます。この度はどうもありがとうございました。 |
ryuring > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/6 14:04 |
---|
こんにちは。
なるほど、5.3を使っているのですね。参照渡しの問題だと思います。 BaserCMSは現在、PHP4もサポートしているので、先日のようなコードとなりましたが、 5.3であれば、引き数の参照渡しを示す「&」を外してあげれば解決します。
この辺が参考になると思います。↓ PHP 5.3: 参照渡しの関数/メソッドを定義してた人は call_user_func_array に注意CommentsAdd Star こういう問題を考えると、PHP4をサポートしていくのもそろそろ限界かもしれませんね。。 Twitter:@ryuring |
cruel > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/5 1:44 |
---|
yosyos さま
ありがとうございます。ここしばらくクライアントからは連絡がないため、また 週明けにでも問い合わせして、うまくいくといいのですが・・・。 ryuring さま ryuring 様の環境では動作されているとのことで、私の環境(CSV, MySQL)でも再度 確認を行っておりましたが、やはり動作しないようです。スマートURLのオン・オフ 両環境でも試しましたが、結果は同様でした。 デバッグモードを有効にしたところ、以下のようなエラーが発生しておりました。 エラーをクリックして展開された部分も含めて記載いたします。
MySQLのテスト環境では、デバッグモード3にするとメニュー等が文字化けして 正常に表示できませんでしたが、CSVの方ですと問題なく表示されましたので、 そちらでのプラグイン変数部分も抜粋いたします。
上記変数にあるIPアドレス以外からアクセスを行っておりますが、管理領域への アクセスは可能でした。 PHP 5.3.5という環境が悪いのか、他に原因があるのか、もしお気づきの点がござい ましたらご指摘いただけますと幸いです。 たびたびのご依頼で申し訳ございませんが、よろしくお願いいたします。 |
ryuring > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/4 0:30 |
---|
> cruel さん
先日書いたプラグインを実際に試したのですが、こちらの環境では正常動作しました。 下記のコードで実際のIPの値を確認してみてください。in_arrayでチェックをかけているだけなのでデバッグは簡単だと思います。
> yosyos さん 忙しい事は何よりです!是非本業を頑張ってください! Twitter:@ryuring |
yosyos > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/3 23:47 |
---|
cruel さん
動作されたようで何よりです。 クライアントのお話、上手くランディングされることを祈るばかりです。 ryuring さん BaserCMSのプラグインフックは盲点でした。。。 ご指南ありがとうございました。 IPブロック・Basic認証・Digest認証を絡めた形でプラグインを妄想してみたのですが 現状手が回らず、すぐに着手はできなそうです。 CakePHP Securityコンポーネントを使った方向で考えてはいますが... 嬉しいことか悲しいことかこんな時に限って忙しくなってます… |
cruel > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/3 5:38 |
---|
ryuring さま
サンプルコードだった旨、承りました。私の方でもこのコードを参考に、動作 するプラグイン的な物が作れないかどうか、テストしてみます。この度は誠に ありがとうございました。 # ただ、そのクライアントにBaserCMSを導入するという話自体が宙に浮きかけて # おりまして、作っても徒労となる可能性も出てきているのが憂鬱ではありますが # ・・・orz |
ryuring > Re: Admin領域へのIPアドレスによるアクセス制限 @ 2011/3/3 5:13 |
---|
ごめんなさい、本体に影響を与えないプラグインでの簡単な実装例をヒントとしてお伝えしたかっただけなので動作検証は全く行ってませんでした。
フック処理の中身は色々書き方があると思いますので色々試して頂ければとおもいます。 どなたかプラグインとして作ってくれたら嬉しいなあ 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/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 |
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仕込みの方法で考えました。 例えば以下のような感じで
どちらもスマートじゃないのですが、やむを得ずの場合、私ならこうやっちゃうだろうな・・・ という回答でしかないのですがいかがでしょうか? ※この記事をご覧の方で同様の事案に対応されている人がいましたら、私も教えて頂きたいです。 |