CakePHPで開発してて、管理画面(admin)へのアクセスはIPで制限したいな
という場合の設定方法
昔、componentとか駆使して設定したことがありますが、もっと簡単な方法がありました。
htaccessを使う方法です。
/webroot/admin のディレクトを作ります。
そのadminディレクトリにhtaccessを置きます。
order deny,allow deny from all # 許可したいIP allow from 1.0.16.0
Webシステムに関することを中心に書いてます
CakePHPで開発してて、管理画面(admin)へのアクセスはIPで制限したいな
という場合の設定方法
昔、componentとか駆使して設定したことがありますが、もっと簡単な方法がありました。
htaccessを使う方法です。
/webroot/admin のディレクトを作ります。
そのadminディレクトリにhtaccessを置きます。
order deny,allow deny from all # 許可したいIP allow from 1.0.16.0
CakePHPで開発中、ある特定のURLの場合のみ404エラーが発生しました。
一意のURLを生成するためにbase64_encodeなどを駆使して生成したURLで発生。
色々調べてみると…
base64の使用文字
「a-zA-Z0-9+/」
この最後の「/」が問題のようだ。
urlencodeして使用していたけど×
mod_rewriteでURLに「%2F(スラッシュをurlencodeした文字)」が入っていると404を返すらしい。
それを解決するには、「AllowEncodedSlashes On」にすると解決できるそうだ。
これはデフォルトだとOffになっているため、先に%2Fをスラッシュとして認識し、URLが見つからないと404を返すと。。
んじゃ、Onにして解決だね!
と言いたいところだけど、それはちょっと難しい。
これはApacheの設置httpd.confなどで設定するものらしい。
htaccessでは解決できない。
レンタルサーバーなどでは簡単に変更できないので詰んでしまう・・・・
ということで、私は単純にqueryでgetとして送信することで回避させました。
https://zero-one-x.com/xxxx%2Fxxx
↓↓↓↓
CakePHPでセッションが途中で切れるという現象に遭遇しました。
テストサーバーでは問題ないけど、本番サーバーに移すと症状が発生。
有効期限を30日にしているが、1時間ほどでセッション切れを起こす。
開発ツールを使って、セッションを見てみると、
なぜかセッションが2個発行されている。
1個はCakePHPで発行したもの。
もうひとつが謎のセッション
セッションの説明に下記の注意書きがありました。
https://www.php.net/manual/ja/session.configuration.php#ini.session.gc-maxlifetime
----------
注意: 異なる値を session.gc_maxlifetime に指定している 別々のスクリプトがセッションデータの保存場所を共有している場合、 一番小さい設定値に達した時点でデータが消去されます。
このような場合には、 お互いに session.save_path を使用します。
----------
なぞのセッションが1時間になっていて、それに巻き込まれてセッション切れを起こしているようでした。
サーバーはGMOクラウドサーバー
謎のセッションをどうすることもできない。
htaccessでの変更もエラーが出てできません。
save_pathを変える方法で対応します。
CakePHPのcore.phpを変更
‘defaults’ => ‘php’
↓↓↓変更↓↓↓
‘defaults’ => ‘cake’
これでセッションが/tmp/sessionsに生成されます。
セッションの巻き込み事故回避完了!
CakePHP2.10でAuthコンポーネントを使って認証機能を作った。
ID、パスワード認証までは問題なかったが、認証後に別のページにアクセスしたらACLのエラーが出て困った。
Error: Table aros_acos for model Permission was not found in datasource default.
コンポーネントでACLの読込はしてないのに上記エラーが出てる。
検索しても情報が出てこなかった。
ソースを追ったりして色々調べてみたら下記の設定が原因だった。
$this->Auth->authorize = ‘actions’;
上記設定をするとACLを読み込んでACLの機能でチェックするらしい。
AUTHだけ使う場合は上記設定はなくていいみたい。
CakePHP2.xでデバッグキットを使いたい~
デバッグキットをダウンロードします。
https://github.com/cakephp/debug_kit/tree/2.2
ダウンロードファイルを解凍したら「DebugKit」に名前を変更して、
cakephpのpluginsフォルダに移動させます。
bootstrap.phpに下記を追加
CakePlugin::load('DebugKit');
次に/app/Controller/AppController.phpに下記を追加
public $components = array('DebugKit.Toolbar');
/app/View/Layouts/default.ctp の sql_dump 部分を削除
<?php echo $this->element('sql_dump'); ?>
以上です。
CakePHP2で認証処理を追加する方法
AppContorller.php
public $components = array( 'Auth' => array( 'loginAction' => array( "controller"=>"login", "action"=>"index" ), 'loginRedirect' => array( 'controller' => 'posts', 'action' => 'index' ), 'authenticate' => array( 'Form' => array( 'passwordHasher' => 'Blowfish', 'hashType' => 'sha1', 'userModel' => 'Users', "fields"=>array( "username"=>"account", "password"=>"password" ) ) ) ) );
loginAction: ログインフォームのページを指定
loginRedirect: ログイン処理後に移動するページを師弟
authenticate: 認証処理の種類を指定
User.php(モデル)
App::uses('BlowfishPasswordHasher', 'Controller/Component/Auth'); class User extends AppModel { // ハッシュ処理 public function beforeSave($options = array()) { if (isset($this->data[$this->alias]['password'])) { $passwordHasher = new BlowfishPasswordHasher(); $this->data[$this->alias]['password'] = $passwordHasher->hash( $this->data[$this->alias]['password'] ); } return true; } }
パスワードをハッシュ化する処理
ログイン処理をします。
LoginController.php
class LoginController extends AppController{ public function initialize() { parent::initialize(); } //コントローラー public function index() { $this->loadModel("Users"); if($this->request->is('post')){//POST送信なら if($this->Auth->login($this->data["Users"])){//ログイン成功なら return $this->redirect($this->Auth->redirectUrl()); //Auth指定のログインページへ移動 }else{ //ログイン失敗なら $this->Flash->error(__('ユーザ名かパスワードが違います')); } } } }
AppControllerでAuthの処理を指定しているので、認証をしたくないページにはコントローラーに下記の処理を追加します。
actionを指定すると認証の処理を省けます。
/** * Controller内共通設定 */ public function beforeFilter(){ $this->Auth->allow('index', "view", "edit", "add"); }