サクサク読めて、アプリ限定の機能も多数!
トップへ戻る
衆院選
blog.a-way-out.net
CodeIgniter4とCodeIgniter Shieldでの組み合わせで、CSRF保護を回避できる脆弱性に関するセキュリティ勧告が2022/08/08に公表されました。今日は、この脆弱性について解説しておきます。 SameSite Attackers may Bypass the CSRF Protection · Advisory · codeigniter4/shield なお、この攻撃方法はCodeIgniterに限定されるものではありません。 修正済みのバージョン CodeIgniter 4.2.3 CodeIgniter Shield 1.0.0-beta.2 前提条件 この脆弱性を攻撃するには、攻撃者が攻撃対象のサイトと同じドメインのサブドメインサイトを支配下に置いている必要があります。 簡単に言えば、サブドメインサイトのページを書き換えられるということです。これはそのサ
【警告】 自動ルーティングは大変危険なので無効に設定を変更するか、CodeIgniter 4.2から追加された新しい「自動ルーティング(改善)」を使うことを強く推奨します。 【警告】 CodeIgniter4のルーティングはデフォルトではCodeIgniter3と同じくコントローラとメソッド名により、自動的にルーティングされます。 ルート設定を手動で行う必要がないため、非常に便利です。 しかし、コントローラフィルター機能が追加されたため、コントローラのロジックから一部がフィルターに分離されるようになりました。 例えば、認証済みかどうかの判定をフィルターに移すことができます。 この分離が新たなリスクを生み出しました。 今日は、この自動ルーティングの危険性について再度解説します。 動作確認環境 CodeIgniter 4.2.0-dev (f801829) PHP 8.0.15 PHPビルトイ
CodeIgniter 4.0 のサーバ要件 PHP 7.2 以上 php-json、php-mysqlnd、php-xml が有効 intl、mbstring 機能拡張 libcurl(CURLRequest を使う場合) データベース MySQL 5.1 以上(MySQLi ドライバ) PostgreSQL(Postgre ドライバ) SQLite3(SQLite3 ドライバ) 動作確認環境 CodeIgniter 4.0.4 Composer 2.0.8 PHPUnit 8.5.13 PHP 7.4.13 Xdebug 3.0.1 MySQL 5.7.32 macOS 10.15.7 Composer のインストール Composer とは、PHPでの新しいパッケージ(ライブラリ)管理システムです。 Composer はパッケージ管理コマンドとしての composer コマンド、パッ
去年末(2019/12)にオススメ書籍をまとめてみたことがあったので、それを少し更新して公開します。 上にある書籍がよりオススメというわけではないです。 対象者は「PHP中級者」です。中級者が何かは難しいですが、初心者、初級者では決してないとは言えます。 改めて一覧にしてみると、かなり偏っているかも知れません(笑 こういうのはコンテキストというのがあるため、それが合わないと「お前は何を薦めているのだ?」となるでしょうね。 キーワードは、「モデリング」「オブジェクト指向プログラミング」「TDD」「デザインパターン」「DDD」「チーム開発」「アジャイルソフトウェア開発」「スクラム」でしょうか。 PHP中級者のイメージ たぶん、PHP中級者であれば、PHPに関することはPHPマニュアルなどを調べて解決できるでしょう。PHPのオープンソースプロジェクトに貢献しており、自分でプロジェクトを持っている
(最終更新:2017-09-11) PHPUnitなどを使いアプリのテストを書いているプログラマーのみなさんはコードカバレッジも計測していることと思います。 ここで、カバレッジの目標としてはどれくらいがいいでしょうか? 以前、名古屋のPHPの勉強会でカバレッジの目標を定めているか?という質問を参加者にした時、目標を定めている人はいませんでした。 最近はPHPやCodeIgniterユーザでもテストを書いていない人は減ってきていますので、カバレッジについても興味を持っている人も増えていると思います。 私のアプリのカバレッジの目標 私の結論としては、一般論として、PHPのWebアプリのカバレッジ(PHPUnitでのラインカバレッジ)の目標は80%です。 それくらいあると、何かAPIを変えてしまったりして一部が動作しなくなっても、だいたいテストで検出されます。もちろん漏れることもありますが。 C
PHPUnit 6.0.0が2017/02/03にリリースされました。その後立て続けにバージョンがあがり、02/08に6.0.6がリリースされています。 主な変更点 要件 PHP 7.0以上が必要になりました。 名前空間 PHPUnit_Framework_TestCaseがPHPUnit\Framework\TestCaseに変更されました。 もし、既存のテストコードを変更できない場合は、bootstrapに以下のハックを追加することで対応できます。 if (! class_exists('PHPUnit_Framework_TestCase')) { class_alias('PHPUnit\Framework\TestCase', 'PHPUnit_Framework_TestCase'); } デフォルト設定 デフォルト設定が変更されました。 backupGlobals="true
上記の5フレームワークの平均は3.8%でした。日本人の人口は世界の2%に満たないですので、それと比較すると多いです。しかし、世界のインターネット人口は2016年で34億9千万人らしいので、それだと人口比でそんなに多くはないですね。 詳細 CakePHP https://github.com/cakephp/cakephp/graphs/contributors chinpei215 waterada nojimage suzuki 8 commits(100位のContributorのコミット数) CodeIgniter https://github.com/bcit-ci/CodeIgniter/graphs/contributors kenjis katsew TakayukiSakai 5 commits FuelPHP https://github.com/fuel/core/gr
透明性 今回のGitLabのインシデント対応で際立ったことは、迅速な報告と透明性です。 恐ろしく早く状況が詳細にGoogle Docsで報告されていき、ついに復旧作業がYouTubeでライブで流されました。 データバックアップは失敗したのか? データベースの消失は、複数のインシデント対応中にオペレーションミスが発生し、本番のPostgreSQLデータベースのデータディレクトリが削除されたことによります。 GitLabは事前に以下のバックアップ手段を講じていました。 24時間ごとのデータベースダンプ(pg_dump) データベースダンプのS3へのバックアップ 24時間ごとのAzureのディスクスナップショット 24時間ごとのLVMスナップショット PostgreSQLのレプリケーション しかし、実際には、 5.のレプリケーションはもともとリカバリ目的ではなくフェイルオーバーのためのものであり
NetBeans 8.2、MAMP 4.1(Apache、PHP 7.1、Xdebug 2.5.0)、CodeIgniter 4.0-devという組み合わせでの、ステップ実行のやり方です。 Xdebugの設定 ApacheのPHPでXdebugとリモートデバッグを有効に設定します。 --- php.ini.org 2016-12-16 02:04:54.000000000 +0900 +++ php.ini 2017-02-10 16:24:00.000000000 +0900 @@ -1161,4 +1161,5 @@ opcache.enable_cli=1 [xdebug] -;zend_extension="/Applications/MAMP/bin/php/php7.1.0/lib/php/extensions/no-debug-non-zts-20151012/xdebug.
Composerの公式なダウンロード方法 現在、Composerのダウンロード方法は、 https://getcomposer.org/download/ にありますが、以下のようになっています。 php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" php -r "if (hash_file('SHA384', 'composer-setup.php') === 'bf16ac69bd8b807bc6e4499b28968ee87456e29a3894767b60c2d4dafa3d10d045ffef2aeb2e78827fa5f024fbe93ca2') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlin
「Snowden Says Drop Dropbox, Use SpiderOak」ということで、SpiderOakを使うことにしてみました。 SpiderOakは、プライバシーを重視したDropboxみたいなオンラインストレージです。 Windows Mac OS X Linux Android iOS で使えます。 ‘Zero-Knowledge’ Privacyをキャッチコピーに、データは端末で暗号化されサーバ上で保管され、鍵をサーバで共有しないため、サーバ上ではファイルを見ることができません。 以下の紹介リンクから登録すると追加で1GBもらえて、無料で3GBになります。 https://spideroak.com/ ちなみに、DropboxのCEOの「反論」は「プライバシーは犠牲にするけど、他の利便性を提供するよ」みたいな、プライバシーの観点からは残念なものでした。 関連 スノーデ
Composerのpre-install-cmd、post-install-cmdの仕様が変わっていた たまに仕様が変わって動かなくComposerですが、1か月ほど前にまた仕様変更があったようです。 Before, running install without a lock file did an install that was almost an update, but still ran the pre/post-install-cmd scripts. Now we normalized it to actually run an update and fire pre/post-update-cmd, because that's what it is doing. If you have a lock file though it will run install as b
いまいちまとめきれていませんが。誤りなどありましたら、お知らせ下さい。 バックアップの種類 取得範囲による分類 全体バックアップ データベース全体をバックアップする 増分バックアップ 前回のバックアップの後に変更された部分のみをバックアップする 差分バックアップ 前回の全体バックアップの後に変更された部分をバックアップする サービスレベルによる分類 オフラインバックアップ データベースを停止した状態でのバックアップ もっとも安全な方法 オンラインバックアップ データベースを起動した状態でのバックアップ ロックと一貫性の問題が生じる バックアップ形式による分類 物理バックアップ ファイルをバイナリのままバックアップ 論理バックアップ SQL文に変換してバックアップ 物理バックアップよりもバックアップ、そして特にリストアに時間がかかる ロックと一貫性の問題 オンラインバックアップの場合、バック
【PHP, Ruby, Python, Perl】ベンチマーク対決【フィボナッチ数】 という記事がありました。 PHP、Ruby、Python、Perlでフィボナッチ数の39番目「63245986」を求める時間でベンチマークするというものでした。 この記事では、PHP 5.5がRuby 2.0の2倍以上かかっていました。 language version time
ベストプラクティスも時の経過に伴い変わっていきます。 FuelPHPのインストール方法は従来oilコマンドをインストールして行う「クイックインストール」でした。しかし、現在、この方法はクイックではありません。 ということで、私が考えるインストール方法のベストプラクティスをまとめておきます。 リリース版をインストールする場合 結論から言うとZipファイルからインストールする方法が最速かつ簡単です。 Zip ファイルをダウンロードする ブラウザを使う場合は、http://fuelphp.com/ にアクセスし「Download v1.7.3 now!」ボタンをクリックしてください。 コマンドラインからは以下でダウンロードできます。 $ curl http://fuelphp.com/files/download/34 -o fuelphp-1.7.3.zip ダウンロードしたZipを解凍し、必
CodeIgniter Advent Calendar 2015 の6日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。 今日は、CodeIgniter 3.0のモダンなインストール方法です。 ところで、モダンって何でしょうね?この用語もきちんと定義されていませんが、ここでは「何となく今っぽい」くらいの意味で使ってます。 ただ、PHPのバージョンとしては5.4以上とします。PHP 5.3でもCodeIgniter本体はインストールでき動作しますが、この記事に出てくるコンポーネントの中には動作しないものが含まれます。 なお、PHP 5.4も保守はすでに終了していますので、5.5、5.6または7.0へ移行した方がよいでしょう。 Composerのインストール モダンPHPと言えば、Composerです。 Composerとは、PHPでの新しいパッケージ(ライブラリ)管理
MVCとは? 『CodeIgniter徹底入門』によると? 『CodeIgniter徹底入門』(P.76)によると、コントローラ、モデル、ビューは以下のように説明されています。 Controller(コントローラ)は、入力データに従って適切なデータを呼び出したり、ModelやViewの連携など、アプリケーション全体の制御を行なう Model(モデル)は、データベースへのアクセスやデータの修正/加工などの処理を行なう View(ビュー)は、処理結果の表示など、画面表示を担当する なんとなくわかったようなわからないような説明です。 実際には書籍にはもっといろいろな説明があるので読めば理解が進むと思いますが、コントローラとモデルの区別は実はそんなに簡単ではありません。 CodeIgniter User Guideによると? 公式ドキュメントではどのように説明されているでしょうか。 The Mod
従来、CodeIgniterのアプリはテストが書きにくいと言われてきました。 しかし、最新のCodeIgniter 3.0とPHPUnitおよびブリッジツールであるci-phpunit-testを使うと、ユニットテストが難しいと言われるコードのテストも驚くほど簡単に記述することができます。 【注】ここでは、1クラスを1つのユニットと考えることにします。 CodeIgniterとPHPUnitの準備 「イマドキのCodeIgniterでPHPUnit入門 - Qiita」での環境を使います。 GitHubにあるソースを使う場合は、以下のようにします。 $ git clone https://github.com/kenjis/imadoki-codeigniter-phpunit.git $ cd imadoki-codeigniter-phpunit/ $ composer install
著者の金本さんより献本いただきました。ありがとうございます。 2015/12/16にSymfony2の入門書である『基本からしっかり学ぶSymfony2入門』が技術評論社から発売されました。 本書は「Symfonyをマスターするための最短コース」と表紙に書かれていますが、確かに、Symfonyの全体像と使い方をコンパクトにまとめた優れた入門書と言えるでしょう。 ちなみに「王道」とは広辞苑によると「最も正統な道・方法」という意味だそうです(本書より)。 対象者 本書の対象者は以下です。 Webアプリケーション開発のスタンダードな知識を身につけたい人 Symfonyの基礎をつかみたい人 Symfonyの特徴を実践的に学びたい人 上記は書籍に記載されているもので、まったくその通りだと思います。 また、個人的に別の表現をすると、以下のような人向けかなと思います。 Symfonyに興味のある人 ほと
「PHPを使いもせずDISってる君達へ - Qiita」という記事がありました。 概ね正確な内容ですが、まだ根本的にPHPの配列の仕様がわかっていないような記述が一部に見受けられました。端的なものが以下です。 今まで話したようにPHPには配列型と辞書型は曖昧なものです。 およそプログラミング言語の実装において型が曖昧ということはありえません。内部的には型は厳密です。でなければ実装できません。 ただし、自動的に型が変わることがあり、ユーザの理解が曖昧だと、言語の仕様も曖昧に感じるということです。 ということで、PHPの配列についてよく理解していないPHPユーザもまだいるでしょうから、仕様について少し記事を書くことにします。 PHPの配列とは? PHPの配列について知っておくべきことは以下ではないかと思います。 PHPの配列はarray型の1つしかない PHPの配列は順番を保持している 配列の
FuelPHP Advent Calendar 2015 の1日目です。まだ、空きがありますので、興味のある方は気軽に参加してください。 FuelPHPドキュメント翻訳の歴史 そもそもFuelPHPの公式ドキュメントの翻訳が始まったのは、2011年11月10日に遡ります。 うぉ、 @NEKOGET さんがFuelPHPのドキュメントの翻訳始めてる http://t.co/REL9qEh5 #fuelphp — kenjis (@kenji_s) November 9, 2011 GitHubで本家のドキュメントリポジトリがフォークされ、日本語翻訳のためのリポジトリが作成されました。 https://github.com/NEKOGET/FuelPHP_docs_jp その時のFuelPHPのバージョンは1.2でした。 ▼コミットのグラフ(本家リポジトリでのコミットも含む) それから4年、ず
Googleで「Hostヘッダインジェクション」を検索しても「HTTPヘッダインジェクション」しか出てこないので、この記事を書くことにしました。 ちなみに、「Hostヘッダインジェクション」自体はPHPに固有というわけではなく、あらゆる環境で起こり得ます。 Hostヘッダインジェクションとは? HTTPリクエストの「Hostヘッダ」の値を攻撃者が操作する攻撃です。 例えば、以下のようなコードがあった場合、$_SERVER['HTTP_HOST']の値を操作できれば、リンク先を自由に変更できます。 <a href="http://<?php echo $_SERVER['HTTP_HOST']; ?>/?token=secret"> 例えば、PHPビルトインWebサーバの場合ですが、telnetしてアクセスしてみましょう。 $ telnet localhost 8000 Trying 127
PHP 7.0.0-RC6 がリリースされ、PHP7の正式リリースが迫っています(予定では2015/11/12)。今日は、既存アプリのPHP7への移行について整理しておきます。 既存アプリをPHP7に移行する前には以下を実施するとよいです。 テスト環境を構築する 拡張モジュールの対応状況を調べる ライブラリなどの対応状況を調べる 変更点に関するドキュメントを読む php7ccをかける コードを修正しテストする 6つあげてますが、結局はPHP7で「テストする」ということに尽きます。 テスト環境を構築する PHP7の実行環境がなければ始まりません。Vagrantなどでテスト環境を構築できます。探せば色々あると思いますが、1つだけ紹介するとすれば、Rasmusさんのphp7devでしょうか。 https://github.com/rlerdorf/php7dev 参考:PHP7のテスト環境を構築
Zendによる新しいマイクロフレームワーク、zend-expressiveのバージョン1.0.0rc2がリリースされました。 今日は、このPSR-7対応のzend-expressiveをインストールしてみます。 zend-expressiveのインストール 最も簡単なインストール方法である、スケルトンプロジェクトをComposerでインストールする方法でインストールします。 $ composer create-project -s rc zendframework/zend-expressive-skeleton ze ルータの選択 まず、以下のようにルータをどれにするか聞かれます。 Installing zendframework/zend-expressive-skeleton (1.0.0rc2) - Installing zendframework/zend-expressive-
Ray.Aopを使うと、PHPでもAOP(アスペクト指向プログラミング)が使えます。 PHPの言語仕様にはAOP機能はありません。Ray.AopではどのようにAOPを実現しているのでしょう? AOPとは? 例えば、Ray.Aopを使うと、以下のようにアノテーションを指定することで、そのメソッドをインターセプトし、メソッド実行の前後に処理を追加することができます。 src/HelloService.php <?php class HelloService { /** * @Benchmark */ public function say() { return 'Hello World!'; } } 例えば、以下のようなインターセプターを作成しバインドすれば、メソッド実行の時間を計測して表示できます。 src/Benchmarker.php <?php use Ray\Aop\MethodIn
今日はPHP界隈で大人気のDependency Injectionと、それに関連する用語について整理しておこうと思います。 以下のような状況があるのではないか?と思ったからです。 多くのPHPユーザがDependency Injection(DI)をよくわかっていない、あるいは正確に説明できません。 そして、デザインパターンである「DIパターン」とDIをサポートするツールである「DIコンテナ」を混同しています。 また、「DIパターン」と「サービスロケータパターン」をうまく区別できていません。 Dependency Injectionとは何か? Dependency Injectionとは「Dependency」を「Injection」するというデザインパターンです。 日本語では何故か「依存性の注入」と訳されており、これが混乱の元ではないかと思います。 日本語で「依存性」と言うと、「依存性は
FuelPHP 1.7.3をインストールしようとすると以下のようにトークンを聞かれることがあります。 Could not fetch https://api.github.com/repos/fuel/auth/git/refs/heads?per_page=100, please create a GitHub OAuth token to go over the API rate limit Head to https://github.com/settings/tokens/new?scopes=repo&description=Composer+on+<servername>+2015-06-26+0933 to retrieve a token. It will be stored in "/home/<username>/.composer/auth.json" for fut
今日は、VirtualBoxとVagrantを使って、軽量高速なPHPフレームワークCodeIgniterのための開発環境を作成してみます。 CodeIgniterの速度については、2014年の最新PHPフレームワークをベンチマークしてみたを参照してください。 Vagrantを使えば簡単に他の開発者と同じ仮想マシンを構築できます。 VirtualBoxとVagrantのインストール フリーな仮想化ソフトウェアであるVirtualBoxを、以下からダウンロードしインストールします(執筆時の動作確認バージョンはVirtualBox 4.3.18)。 https://www.virtualbox.org/wiki/Downloads VirtualBoxの仮想イメージを操作するツールであるVagrantを、以下からダウンロードしインストールします(執筆時の動作確認バージョンはVagrant 1.
あなたのお気に入りのフレームワークCodeIgniterが帰ってきた!(CodeIgniter 3.0の感想) すでにご存じの人も多いと思いますが、2015年3月30日にCodeIgniter 3.0.0がリリースされました。 その影響もあり、日本語の情報も徐々に増えてきてます。そこで、私もこのあたりで現在の感想を書いておこうと思います。 (参考)PHPカンファレンス福岡でのCodeIgniterについて発表資料 ライセンスがMITライセンスに変更 何と言っても最大の変更点はライセンスが変わったことです。 2.xまでは独自ライセンスのCodeIgniterライセンス(GPL非互換)だったものが、3.0からはMITライセンスになりました。 これは、CodeIgniterのオーナーが私企業のEllisLabから、大学であるBCITに変わったことにより実現しました。 EllisLabにより3.0
次のページ
このページを最初にブックマークしてみませんか?
『— A Day in Serenity (Reloaded) — PHP, CodeIgniter, FuelPHP, Linux or something』の新着エントリーを見る
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く