PHP騒動もやっと収束という感じ。
パッチリリース前にセキュリティホールの詳細を公開してしまったという人物が、俺は(情報統制に協力しなければいけない事を)知らなかったとか何とか言っているらしい。
ヒーローになれると思って公表したのに、散々叩かれる事になった。
PHPとは何かというと、昔で言う所の高級言語である。
高級言語とは人間が理解しやすいものを、そう呼んだ。
昔はマシン語だとかアセンブラでプログラムを書いて、それは人間には理解しにくいが機械は理解しやすいものだった。
そこから機械の能力が上がるにつれ、メモリの容量が増えるにつれ、人間に分かりやすい言語で書いた方が効率的だと考えられるようになった。
今は高級言語とは言わずに高水準言語というのだそうだ。
画面に”HELLO WORLD”と表示させるプログラムはどのようなものか。
| –言語– | –書式– |
| PHP | echo “Hello World”; |
| Perl | print “Hello World”; |
| BASIC | PRINT “Hello World” |
| java | System.out.println(“Hello, World”); |
| FORTRAN | print *, ‘Hello, World’ |
| Python | print(“Hello, World”) |
| ALGOL | outstring(1, “Hello, World”) |
| COBOL | DISPLAY “Hello world” UPON CONSOLE. |
| Lisp | (write-line “Hello world”) |
アセンブラやCで書くと、まず画面に表示させる部分を作らなければいけない。
LCDが付いているのなら、LCDコントローラに対してコマンドを送ってと、そこから書く必要がある。
計算にしても何にしても同じで、相当面倒な事になる。
高級言語はコンパイラとインタプリタがあって、コンパイラの方が高速に実行出来ると言われた。
コンパイラは、高級言語を予めコンパイルして実行可能形式にしておく事。
インタプリタは1行或いは複数行ごとに、命令を翻訳しながら実行していくエミュレータみたいな感じだ。
PHPはソフトウエアではないと言い出す人もいる。
PHPだろうがOSだろうがBIOSだろうが、ハードウエア以外のものはソフトウエアだ。
CPUの中のマイクロコードはソフトウエアなのか、ハードウエアデコーダなのかという議論ならともかく、である。

PHPにしても他の言語にしても、人間に分かりやすく書かれた構文をCPUで実行出来るコードに変換していく。
今回のPHPの脆弱性もそうなのだが、外部から値を入力するような場合は入力された値をPHPが処理する事になる。
そこで思いがけない値が入力されたときの挙動が想定外になると危ない事が起きる。
それはPHPの処理そのものと言うよりももっとプリミティブな部分の、メモリの扱いなどによるものだ。
いずれにしても、想定外の事が起きなければ危険度は高くはない。
しかしWebで使う場合には色々なパラメタを入力する仕組みになっている事が多いので、外部から何を突っ込まれるか分からない。
そして脆弱性が公開されると、そこを狙って悪いコードを作る事が出来るので危険度が高まる。
F&Fでは昨日PHP修正版に入れ替えたのだが、それ以前は外部からの入力を阻止していた。
一つはHTTPサーバであるApacheでの防御、もう一つは外部からデータを突っ込まれる事をApacheのログで判断し、IPを遮断することにしていた。
勿論これで完璧と言う事ではないが、何もしないよりはマシだ。
楽天は22日の午前中から一部のサイトをメンテナンス中として止めた。
復旧は遅いサイトでも翌日には行われた。
ソフトバンクは緊急地震速報が配信出来なくなると言っているが、これはいったい?

普通に普通の処理をしている限り、今回の脆弱性が直ちに危険だとは言えない。
緊急地震速報の配信はWebとは関係のない、閉じられた所で動いているだろうに。
PHP関係を調べていたら他におかしい所が見つかっちゃった、或いはPHP4とかPHP5の古いバージョンを使っていたのかも知れない。
こうなると修正は結構大変で、文法自体が変わってしまっているのでプログラムにも手を入れる必要がある。
ライブラリなども入れ替えが必要なので、考えただけで面倒だ。
今時なので古いコードをAIに渡せば書き直してはくれるだろうが、テストは必要になる。

それでもですよ、そもそも無停止系のシステムなのだから予備機が動いているはずだ。
予備機を先に直してプライマリ側と入れ替えれば問題はないし、それが出来ないにしても3日も止めるのは随分のんびりしている。
ちなみにさくらのサーバのPHP入れ替えは、おおむね(サーバあたり)1時間程度で終わったそうだ。
F&Fサーバの場合はコンパイル済みバイナリの適用だったので、1分以内には完了した。


コメント