月: 2014年12月

速いアプリケーションの作り方

Phalcon Adventカレンダー18日目として書いています。

一台のアプリケーションサーバーで10リクエスト/秒で十分というサービスであれば、どんなプラットフォームを選んでも問題ありません。一台のサーバーが10リクエスト/秒しか処理できなくても、ページがキャッシュできるならリバースプロキシで簡単に数千リクエスト/秒以上でサービスできます。このようなサービスであればPhalconのようなフレーワムワークを使わなくても大丈夫です。

しかし、メッセージング系などリアルタイム性の高いサービス、つまりHTTPキャッシュがあまり有効に利用できないシステムでは速度が非常に重要です。

もっと読む

Phalcon PHPとSails Node.jsのベンチマーク

以前にフレームワーク対決:Node.js+SailsとPHP+PhalconのベンチマークとしてPhalconとSailsのベンチマークを行ったのですが、Apacheを利用した場合のPhalconの性能が全く違うので取り敢えずブログに書きます。

このエントリはPhalcon Adventカレンダー17日目として書きました。少し前に設定がおかしいことに気づいて非公開にしていた物を修正しています。

もっと読む

Sailsで全てのCPUコアを使う

Node.jsのMVCフレームワークであるSailsはインストールも簡単で、気軽に試せます。しかし、Node.jsはシングルプロセス&スレッドで動作するので今時のマルチコアCPUではその性能はフルに発揮できません。以前はNginxなどで設定するなど、色々面倒でしたがPM2を利用すると簡単にプロセス管理が行えます。もちろんSails以外のNode.jsアプリケーションのプロセス管理にも利用できます。

もっと読む

PostgreSQLのJSONB型を利用してタグ検索を行う

遅れてしまいましたが、PostgreSQL Adventカレンダー2014の9日目です。昨年はタグ検索するならPostgreSQLで決まり!でPostgreSQLの特徴でもある配列型を使ったタグ検索を紹介しました。今年はJSONを使ってみたいと思います。

つい先程、PostgreSQL GitリポジトリからPostgreSQL 9.4のソースを取得&ビルドして記事を書いています。(記事を書くことを忘れていたので大急ぎで書きました)

もっと読む

SQLiteデータ型の仕様とセキュリティ問題

SQLiteはファイルベースのオープンソースRDBMSです。オープンソースとしては珍しいパブリックドメインライセンスを採用しています。SQLiteはファイルベースなのでデータベースサーバーが必要なく手軽に利用できます。SQLiteは組み込みデバイスで広く利用され、Android/iOSなどでは標準的なデータベースとして利用されています。モバイルデバイス以外での利用も広がっており例えば、Drupal8はSQLite3に対応しています。

普通のRDBMSのようにSQLクエリが利用できるのでとても便利ですが、SQLiteの仕様は他のRDBMSと異なるので注意が必要です。

追記:論理的・体系的セキュリティを構築していれば、ここに書かれているようなセキュリティ上問題となる事を自身で分析/対応できるようになります。

もっと読む

安全なAPI過信症候群 – 普通のRDBMS編

昨日書いた安全なAPI過信症候群の処方箋 – execv/SQLite3編はSQLiteの仕様がRDBMSとしてエキゾチック過ぎて、さらっと書いたよくあるRDBMSでの「安全なAPI過信症候群」を全く理解して頂けなかったケースもあるようなのでもう一度書きます。

プリペアードクエリには色々問題もあり、セキュリティ対策としてそれだけ教えるのはNG、と考えている方はプリペアードクエリ過信症候群ではないので、このエントリを読む必要はありません。

もっと読む

安全なAPI過信症候群の処方箋 – execv/SQLite3編

またプリペアードクエリなど、安全とされるAPI万能と考えている方に会ったのでエントリを書きました。広く病気として治療すべき、と思いエントリを書きます。安全なAPI過信症候群と名付けました。

安全なAPI過信症候群(同類にプリペアードクエリ過信症候群など):「安全」とされるAPIを使えば安全と、盲目的に信用し考慮すべきリスクを考えない症候群。ITエンジニアが発症し最も重要なセキュリティ対策である入力バリデーションを「必要ない、できない、セキュリティ対策ではない」エスケープは「必要ない、有害である」とする場合、かなり重度の場合が多い。

このブログでは既に何度もプリペアードクエリクエリは不完全である、と指摘しています。プリペアードクエリを使っていれば安全と盲目的に信じている方向けの基礎知識を紹介します。コマンド実行APIのexecvと最も多く利用されているRDBMS、SQLite3が題材です。

現実を知れば安全とされるAPIを盲信することも危険だと解り、安全なAPI過信症候群を完治できると思います。

追記:普通のRDBMS編も作りました。SQLiteの仕様でデータ型がどうなっているか簡単に説明しました。

もっと読む

The Pirate Bayに学ぶWebシステムの作り方

The Pirate Bay(TPB)と言えば、世界最大のtorrentサイト、著作権違反サイトとして有名です。実際、サイトの運営者は起訴され刑務所に収監されています。にも関わらずTPBは現在も運用されています。

TPBは世界TOP100のサイトで毎日何百万ものユニークビジターが訪問しているサイトです。HOW THE PIRATE BAY REMAINS UNTOUCHABLEにTPBのシステム構成がどのようなものか紹介されています。

もっと読む

Phalcon2.xのRPMパッケージを作る

このエントリはPhalcon PHP Advent Calendar 2014 4日目のエントリです。2日目としてPhalcon 1.xのRPMパッケージを作っています。今回はPhalcon2のRPMパッケージをphp-phalcon2.xパッケージとして作ります。多分動くと思いますが、ほとんどテストしていないので問題があったらコメントをお願いします。

php-phalconとphp-phalcon2パッケージは同時にインストールできないので注意してください。

もっと読む

PHP/Apache httpdのファイルアップロード/ダウンロード処理

最近、ファイルアップロード/ダウンロード対策に関する検索が増えているようなので書きました。PHPの場合、スクリプトがアップロードされ実行されてしまうと致命的です。アップロードされたファイルを公開ディレクトリに保存することは好ましくありあせん。しかし、既にそうなっているアプリケーションの場合、改修が困難な時もあります。このような場合もより安全に利用できる設定を紹介します。

参考:「スクリプトアップロード対策」も合わせてどうぞ。

もっと読む

Phalcon PHPのRPMパッケージを作る

PHP最速フレームワークのPhalconですが、RPMパッケージを使ったシステムへのインストールは最速ではありません。Ubuntuの場合、パッケージがあってapt-getで一発インストールできるのですが、デフォルト/EPELリポジトリにはRHEL/CentOS/Fedora用のRPMパッケージはありません。そこでPhalconのRPMパッケージを自分で作る手順を紹介します。

このエントリはPhalcon PHP Advent Calendar 2014 2日目のエントリです。

追記:SRPMファイルのダウンロードリンクを忘れていました。次のURLでダウンロードできます。

私が普段使っている環境はビルドツールが全て揃っています。もし依存性(BuildRequires、Requires)などが足りなかったら教えてください :)

もっと読む