カテゴリー
Computer Development

PHPでQtアプリ

PHPでGTKアプリが作れるPHP-GTKは以前からありましたが、PHPでQtアプリが作れるPHP-Qt 0.1がリリースされています。

The PHP-Qt team is pleased to announce the immediate release of PHP-Qt Version 0.1!
It’s been nearly a year since the release of version 0.0.3 and many, many things have changed, including the move to using the Smoke library.
A few of the changes from 0.0.3 to 0.1 are:

* Unit tests based on phpunit
* Overriding of Qt methods in PHP classes
* Improved startup time
* Improved runtime speed
* improved inheritance
* CMake-based build system
* Support for references
* There is now a global tr() function
* Based on the Smoke library
* License: GPL (see note below)

カテゴリー
Security

$intval * 1でサニタイズ…

たまたま見たPHPのコードでSQL文中の整数値を

$intval * 1

として整数型にするサニタイズがありました。この方法をお薦めするわけではありませんが、以前のエントリ

http://blog.ohgaki.net/index.php/yohgaki/2007/07/04/example_1428_a_best_practice_query

でsprintf()の%dを使う方法よりはましです。

$ php -r “echo ‘99999999999999’ * 1;”
99999999999999

実行したマシンは32bitのLinuxシステムですが浮動小数点型に自動変換されるので2^31を越える値でも正しく表示されます。一方、PHPマニュアルの方法だと

$ php -r “printf(‘%d’, ‘99999999999999’ * 1);”
276447231

となってしまいます。最近のDBは大きなモノも珍しくないのでこの程度でオーバーフローするようでは安心できません。もっとも*1方式でもあと一桁増やすと

$ php -r “echo ‘999999999999999’ * 1;”9′ * 1);”
1E+15

と指数表記になるのでこれで十分とは言えません。しかし、マニュアルのベストプラクティスよりは良いです。printf系で処理するなら

$ php -r “printf(‘%1.0f’, ‘99999999999999’ * 1);”
99999999999999

これで十分なDBも多いとは思いますが、ダイナミックにSQL文を生成するのであれば文字列として渡してエスケープしてしまうと確実です。

カテゴリー
Other

VaioのHDD壊れる…

Windowsのメインマシンとして利用していたVaio Z1ですがHDDが壊れました…時間がないのでここ数日はZero3のメール(仕事のメールだけ)しか見てません。# メールを送っている方、済みません

なんとなくHDDへのアクセスの感じが変わったので、もしかして、と思い次のノートPCはMacBookに決めていたので新しくMacBookは買っていたのですがバックアップはプロファイルディレクトリだけだったので、最近の書いたサンプルコードが消えてなくなりました。結構がんばって書いたのに… subversionリポジトリ作成を後回しにしていた付けです。同じコードを書き直すのは疲れるんですよね…

壊れたのは数日前でやっとましな環境になった、と思ったらOSXとVistaの両方が使えるようにParallels DesktopをインストールしていたのですがParallelsを起動しているにも関わらず何故かWindowsのボリュームは共有ではなくボリュームとして見えていたので開いてみるとNTFSがボロボロに壊れてしまいました。ボリュームはリードオンリーなのかな?と思っていたらリードライトだったのですね… もしParallels Desktopが起動しているときにWindowsのボリュームが見えても決して開いてはいけないようです。(普通は隠れる)

文面から分かると思いますがまだあまりParallels Desktopは使っていませんが結構便利にできているのでXP/Vistaのライセンスが余っている人にはお薦めだと思います。試用版があるのでためし易いです。(私もまだ試用版)ただし、何もしてなくても50%CPU時間を消費(Vista Business)ので軽くはないです。いざと言うときはにbootcampで起動すれば良いので困らないと思います。

ところでParallels DesktopはbootcampにインストールしたWindowsを起動できるので既にWindowsをbootcampでインストールしている人なら追加ライセンスは要らないようです。(間違っていたら教えてください)共有を利用してWindowsからOSX、OSXからWindowsのファイルが扱えるようになっているのは便利です。直接OSXのファイルをWindowsアプリで開くことができるなどかなり便利です。

追記:プロファイルのデータをコピーしはじめたら1日以上かかるって….

カテゴリー
Computer Development

PHP4のサポート終了は2008/8/8

現状でもセキュリティフィックスの状態があまり良いとはいえないのでPHP5が利用できる場合は積極的にPHP5を利用すべきですが、2007/12/31まで通常メンテナンス、以後2008/8/8までセキュリティフィックスには対応ということです。

まだの方は早くPHP5に移行しましょう。

間違っても5.1系に移行しないようにしましょう… 5.1系は今現在もメンテナンスされていません… 5.2系のみメンテナンスされています。

カテゴリー
Computer Programming

Example 1428. A “Best Practice” query

PHPのマニュアルページで「Example 1428. A “Best Practice” query」と題されたSQL文用の文字列エスケープ処理のサンプルコードがあるのですが、

$query = sprintf("INSERT INTO products (`name`, `description`, `user_id`) VALUES ('%s', '%s', %d)",
mysql_real_escape_string($product_name, $link),
mysql_real_escape_string($product_description, $link),
$_POST['user_id']);

mysql_query($query, $link);

この方法はよくないですね… $_POST[‘user_id’]は符号付き32ビット整数だと仮定していて64ビット整数や任意精度整数の場合が考慮されていません。”Best Practice”とするなら整数型と思われるuser_idも文字列として処理し、エスケープしてからmysql_queryに渡すべきだと思います。

カテゴリー
Security

GDにセキュリティホール

GDの開発は終わっている、と思っていたらphp.netでホストしてたんですね。PHPの独自拡張など色々追加されていたので自然な流れとは思います。

CVE-2007-3472、CVE-2007-3473、CVE-2007-3474、CVE-2007-3475、CVE-2007-3476、CVE-2007-347、CVE-2007-3478

とGDライブラリの脆弱性がレポートされています。

整数オーバーフロー等はずっと以前に指摘され、ずいぶん長い間ディストリビュータがパッチで対応していた問題と同一のような気がしますが、どうなんでしょ?