月: 2005年7月

岡山県工業技術センターでPHPセミナー

岡山県工業技術センターでPHPの入門セミナー講師をさせていただきました。会議室に満員の70名ほどの方に聞いていただきました。

入門といっても前半がPHPの紹介、後半がセキュリティ対策の基礎、という入門用のセミナとしては内容がPHPに特化していたと思います。PHPを使っていない方も多かったので私の本と同じで評価は大きく分かれるセミナーになったと思います。

しかしセキュリティ対策の基礎は資料だけでも十分参考になると思うので少しでも安全なWebサイト構築の助けになればよいと思います。

Oracleはセキュリティホールを放置している?

CNET Japanの記事によるとドイツの開発者がOracleは2年以上セキュリティーホールを放置していると主張しているとしています。

先日、OracleはE-Business Suiteに複数の脆弱性に対するパッチを公開しましたが

http://www.securityfocus.com/bid/10871

によるとこれも1年近く対策に時間を要したようです。
この状況からすると2年以上セキュリティホールを放置している、とする主張の信憑性も高いと思います。真実はどうなのか気になるところです。

もう少し調べて見ると上記のBugTraq IDはさらに別の脆弱性もこのIDに含まれているようにも見えます。いろいろ出てきそうな雰囲気ですね。

ちなみに今回リリースされたパッチ郡にはリモートからの任意コード実行、SQL Injectionを防ぐパッチが含まれているそうです。

Googleで株価表示

今、気が付いたのですが言語設定が英語の場合、株価が表示されるようになったようです。日本語で表示されるようになったら便利ですね。Googleで常に上位に表示されるために上場したい!なんて企業も現れる?!

日本でもスパイウェアによる被害が940万

アメリカではスパイウェア(キーロガー)によると思われる被害が急増しています。日本でもスパイウェアにより情報を収集し、銀行口座から不正の送金される被害が940万円あったと発表がありました。(今はアクセスできませんが、TBSのヘッドラインニュースで940万円の被害と報道していました。アクセスできないので間違い?) ジャパンネットバンク他、合計3行で被害が確認されたようです。スパイウェアを使った攻撃の危険性はこのブログでも書いたと思いますが、遂に潜在的な脅威から現実の脅威になったようです。

スパイウェアはブラウザやシステムの脆弱性を攻撃してインストールされる場合もありますが、ネットカフェなどの共有のPCにインストールされる場合も多いです。カーネルレベルのルートキット(スパイウェアの一種)の場合、検出が非常に難しいか不可能な場合もあります。システムコールより更に低レベルの実行結果とシステムコール実行後の結果を比較してカーネルレベルルートキットを検出するなどの手法も考案されていますがいたちごっこでしょう。

Windowsにカーネルレベルのルートキットをインストールされないようにするためには、Windowsは通常ユーザで使用すれば概ね大丈夫です。Windowsマシンで開発しているため管理者権限が必要な場合、開発用のマシンとメールやブラウジングなどの通常作業は別のPCかバーチャルマシンで行う様にした方がよいと思います。

Windowsはコマンドラインでの操作性は最悪ですが、runasコマンドを使うと現在ログインしているユーザ以外の権限でプログラムを実行する事ができます。この機能を使うと多少は通常ユーザでWindowsを実行した場合の問題を回避できます。

参考
http://www.ipa.go.jp/security/topics/170720_spyware.html
http://internet.watch.impress.co.jp/cda/news/2005/03/09/6783.html

PHPのE_STRICTエラー

PHPのエラーレポートレベルはphp.ini設定のerror_reportingで設定されています。

PHP5から追加されたE_STRICTで「あれ」と思われるかもしれない状況があるので書いておきます。

PHP5でE_ALLをerror_reportingに設定してもE_STRICTレベルのエラーは報告されません。デフォルト設定ファイルではE_STRICTは無視されるようになっています。

error_reporting = E_ALL | E_STRICT

と設定しないとより厳しいエラーチェックが行われません。

開発時には言語が用意しているエラーチェックを出来る限り多く使用するべきです。しかし、E_STRICTレベルのエラーレポートを行う設定を行った場合に問題が発生する場合があります。次のコードがどのように処理されるか考えると分かります。

<?php
error_reporting(E_ALL); // E_STRICTは不必要

class foo {
  var $bar;
}
?>

E_STRICTで報告されるエラーには”var”宣言されたプロパティにpublic/private/protectedを使用するよう推奨するエラーがあります。このエラーはコンパイル時に発生するため、スクリプト中でerror_reporting関数を使ってエラー報告レベルと変更してもE_STRICTエラーを無視できません。E_STRICTエラーが有効な環境で、error_reporting関数で確実にE_STRICTエラーが発生しないようにするには、E_STRICTエラー出力を抑制するには最初に読み込まれるファイルのコード中にE_STRICTエラーが発生しないしerror_reporting関数を使用してエラー報告レベルを変更しなければなりません。

# E_STRICTは開発時だけ使う、という方針がお勧めです。
# PHP4用に作ったアプリの修正は手間な場合は、INSTALL
# ファイルなどにE_STRICTは無効にするよう書くだけでも
# 良いかもしれません。

備考:
E_NOTICEレベルのエラーは全て実行時に発生するエラーであるため、E_STRICTの様な問題は発生しません。念のため。

追記:
今時のPHPアプリケーションならE_STRICTエラーも発生しないようにプログラムを作成すべきす。

 

NEC LaVie G タイプRX

LaVie G タイプRXをPentinumM 1.7GHz, 1GBメモリ, 80GB HDD, DL対応 DVD, WindowsXP Proを1台約19万で2台購入。2Kgほどの重さで、持ち運ぶ時にも問題ないです。今はNECダイレクトで14%OFFクーポン(今日まで)が使えるのでカスタマイズしたい方はNECダイレクトがよいかも。このPCはSXGA+(1400×1050)なのでソースコードを眺めるには良いPCと思います。今使っているVAIOもSXGA+ですがやはりこれくらいは欲しいところです。このスペックで19万は安いかと思います。
# 損した気分になるかもしれないので価格比較は行ってません

価格・スペック比以外にもNECは近所にサービスセンターがあって前に使っていたノートPCが壊れた時の対応が非常によかったのでこれに決めました。

PHPのメモリ・リソースリークの修正

気が付いていてもやってないことが多いので、せめて近日中に処理しようと思っていることくらいは公開して自分にプレッシャーをかけてみる事にしました。

PHPにはError HandlerやException Hanlderを使った場合、メモリやリソースが開放されない場合があります。多少のリークは問題とならない場合がほとんどですが中にはサーバがフリーズしてしまうケースもあります。原因と修正すべきコード、対処方法なども分かっています。取り掛かろうとしてinternalsに軽くメールしたのち放置中…

# この問題と原因は随分前から知っていて放置してました :(

ハンズフリーでも運転中の電話は危険

CNNニュース(テレビでみたのでURLなし)によると、米国の調査では自動車の運転中にイアフォンなどを利用したハンズフリー通話と携帯電話を手にした通話では危険度はあまり変わらない、と放送していました。合わせて通話している場合と通話していない場合では事故の確率が4倍になるとしていました。アメリカでも市などの条例で運転中の通話にイアフォンを使うよう推奨しているそうですがこの調査によるとイアフォンを使用した通話は全く意味が無いとしています。

ダイアル中、受話中、通話中など状態によって危険度は変わるとおもいますが、どのような状態で危険度測定したかなどの詳細な情報が無かったので判断しかねる部分もありますが、少なくとも話し始めたら手に持っていてもイアフォンを使っていても同じ危険度らしいです。

日本の場合、運転中にメールを読んだりする人もいるので運転中に端末を持ってはいけない、とするのは合理的とは思います。法律ができてから電話で通話中のためおかしな運転になっている車を見かけることも無くなりました。しかし、香川県のチャイルドシート利用率は年々下がり半分程度になっているそうです。同じような結果になりそうな気がします。

追記:後で関連URIを見つけました
http://hotwired.goo.ne.jp/news/technology/story/20050715305.html

関数の戻り値と定数値(リテラル)への参照

追記:このエントリへのアクセスが多いので加筆修正しました。

Fatal error: Only variables can be passed by reference

直訳すると「致命的エラー:変数のみ参照渡しが可能です」となります。エラーメッセージの通りvariable(以外)の値は参照として渡せないのでエラーになっています。エラーメッセージが適切かどうかは微妙ですが、意訳すると「致命的エラー:ソースコード中に記述した定数値(リテラル)へのアクセスはできません」あたりが妥当と思います。当然ですがdefineで定義した定数値を返す事は可能です。PHP内部では定数は変更できない「変数」の様に実装されているからです。このエントリの「定数値」を正確に書くと「ソースコード中に記述された定数値」となります。

もっと読む

.mobiドメイン承認

何度か「もう新しいドメインは必要ない」とこのブログに書いていますが、ICANNはモバイル用に.mobiを承認したようです。

EU用の.euドメインは、EUが最終的には統一国家のような体制を目指しているので必要かとおもいますが、アダルトサイト用.xxxやモバイル用.mobiはドメイン名のレジストラとごく一部の利用者(ドメインを必要とするもの)を除いて不必要なドメインです。管理上、地域別にドメイン名を付けるのは理解できます。しかし、サイトの種類に応じてドメイン名を付ける、と言うアイデアは破綻している事が証明されてから久しいです。トップレベルのドメイン名がどんどん増えていますが、レジストラのみ儲ける仕組みですね。
# 会社名.xxx等をアダルトサイト運営者に取得されないように
# するためだけに企業が.xxxドメインを取得するのは目に見え
# ています。.xxxドメインの半数以上は普通の企業のドメイン
# となると思います。(アダルトビジネスを甘く見すぎ?)

ところでアフリカ連合が統一国家的な体制になった場合、ドメイン名をどうするか問題になりますね。.auは既に使用済みです。この心配が現実になるとしても少なくとも50年以上先の話とは思いますが。