PHPセキュリティコンソーシアム発足 74
ストーリー by koyhoge
Webから脆弱性を追放セヨ 部門より
Webから脆弱性を追放セヨ 部門より
tamo曰く、"PHP Security Consortium (PHPSC) が 発足した。 セキュアプログラミングを励行する団体として PHP Security Guide の公開といった運動をしているようだ。 国際的な活動を目指しており、各種リソースの翻訳を歓迎している。"
比較的容易にWebアプリケーションを作成できるせいもあって、 非常に多くのWebアプリやサイトがPHPを用いて開発・公開されている。 その中にはセキュリティに無頓着なものが少なからず存在するのも事実だ。 今回のようにプログラミングガイドを広く公開し、開発者に対して啓蒙活動を行うことは、大きく広まってしまったPHPの宿命ともいえるかもしれない。
追い付けない現実 (スコア:4, おもしろおかしい)
受け取ったソースを見てガクガクガク...
どうやら、我社にも協力会社にもロクなエンジニアがいなかったらしく、
見付次第塞いでるけど、穴の生産されるスピードの方が早くて泣きそうです。
担当者曰く、「文字列のエスケープは文字化け対策」、
「ソケットディスクリプタの値が判らないから盗聴されない」、
「正規表現なんてマイナーなモノなんか相手してらんない」、
そうです。
来週、通しテストがあるのに.....
自戒を込めて常に疑いの目を (スコア:4, 参考になる)
PHPに限らずWEBアプリっていうのは、下手をすると周りがすべて敵という環境で稼働するものです。
性悪説に基づいたコードを書く必要があるっていうこと。
PHPSCは「PHPセキュアプログラミングならここを見ろ」てなものになって欲しいと思います。
いや、今まで各所でこの類の情報はたくさん出ていますけれど。
やっぱ見ない人は、有益な情報があっても見ない罠。RTFM :p
#個人的には言語仕様として「絶対こうじゃないと駄目」てな制約が欲しい
#error_reportingが標準設定だと、まさにスパゲティにイチゴジャムをかけた状態ですし
Re:自戒を込めて常に疑いの目を (スコア:0)
見ないよ、見たら塞がなければいけないじゃないか!
それよりも、ノーガード戦法で「見つけた」と言ってきた
奴を捕まえて、法的手段に訴えてやれば、
あそこは脆弱性がいっぱいあっても法的手段に出るから
やめておこうって事になるんだよ!ザマーミロ!
#それで守れたら世話ねえよ
Re:自戒を込めて常に疑いの目を (スコア:1)
>やめておこうって事になるんだよ!ザマーミロ!
当然ながら、この場合、「やめておこう」と言ってくれないのがクラッカーなわけでして...
というわけ(?)で、
たとえば、いざそれで個人情報取られちゃったときに、
彼らの「技術的劣位」の責任を追求するようになってくれたら、
それはそれでバランスが取れるんでしょうね。
#嬉しいバランスではないですが。
Taint チェックとか (スコア:3, 参考になる)
こういう啓蒙活動自体は (ある意味) 喜ばしいのだけど、一方でやや空回りしている印象があるなあ。
magic_quotes_gpc や super グローバルもいいけど、早々に sanity / taint レベルや文字コード / 言語の情報を持てる string type を導入すればよかったのに、そのあたり遅れている感が否めない。
# もっとも、PHP5 なら __tostring() を使ってある程度達成できますが。
# それにそういう仕組みがあったからといってセキュアになるとも限りませんがかなりましでしょう。
Hardened-PHP でやってることも間違っちゃいないけど、あれは実装如何じゃなくてむしろブランドだからなあ。
PHPしかできないプログラマー (スコア:2, 参考になる)
ってのがいるんですよね。彼らはWebアプリケーションしか知らないプログラマーで、データ構造やアルゴリズムの基礎も知らないし、そういう類の本が役に立つということも知らない。抽象化とか再利用という言葉からひどく縁遠いところにいる彼らだから、セキュリティについてもレシピ集として「即使える」状態にして渡さないといけない。その点、この試みはいいんじゃないかな。
Re:PHPしかできないプログラマー (スコア:3, 参考になる)
最近おいらも PHP をちょくちょくさらっているのですが (専ら PHP5 なのですが)、PHP の解説書に、PHP の言語仕様について詳しく書かれたものがほとんど存在しないようなので、正直戸惑っております。自分の日記でも触れているのですが [srad.jp]、少なくとも言語仕様という部分についてのみいえば、PHP のサイトのマニュアル [php.net]に匹敵するような解説書には、いまだ出会ったことがありません。
PHP5 になって、オブジェクト指向プログラミングに関わる部分に大きな変更が加えられたことについては、たいていの書籍で触れられているのですが、そのオブジェクト指向プログラミングに有効なエッセンスや、その辺の情報に詳しい書籍の紹介といった情報にも触れられず、それどころか、「参照渡し」という言葉を唐突に出しておきながら、 PHP における「参照」の扱いについては全くといっていいほど触れていないという有様で、これでは PHP からプログラミングに入り始めたプログラマーにはあまりにも気の毒だなぁと思わざるを得ない状況です。
今回の試みにはもちろん賛成なのですが、願わくば、書店で販売されている書籍類についても、こうした意思がしっかりと反映されたものが出てきてくれることを、強く願うばかりなのであります。。。
むらちより/あい/をこめて。
Re:PHPしかできないプログラマー (スコア:1)
執筆できるライターさんには程度の低い人しかいないから
PHP5の重要な変更点や新機能をまともに扱った記事がネエヨ!
というだけの話なのでは?
これからどんどん仕様が変わるかも、というようなもの
(例えばLonghornとかね)について記事書くとしたら、
確かにリスクはあるでしょう。でも既にリリースされてこれから先
大きく変化するものではないPHP5についてうまく書けないのは
PHP5について分かっていないだけのみならず、プログラム全般に
おけるセンスというか広い視野というかそんな類の能力が
ないとしかいわざるを得ないですわな。
そして「教える」方がこの体たらくだから、ましてや末端の
プログラマーは……という話ですか。
#でも人のことあんまり言えない罠
Re:PHPしかできないプログラマー (スコア:2, 参考になる)
> PHP5の重要な変更点や新機能をまともに扱った記事がネエヨ
いち PHP フリークとしてレスポンスを返しておくと、PHP にも人は居るのですが皆忙しいのか、単発連載でライブラリやフレームワークといった旬のネタを扱うのが専らで連載や書籍、まとまった入門記事の方には余り手を突っ込んでくれない。
方や出版社もライター専業の方や余り名前を見かけない方を起用しては初心者ウケの良い売れそうな本を出す傾向が強い。当然普段から PHP に浸かっていないと深い記事は書けないのであって。
> そして「教える」方がこの体たらくだから、ましてや末端のプログラマーは……という話ですか
言い方は悪いですが、上位層と下位層に分断されていて情報の流通や質の循環もそれぞれで回っているという感じでしょうか。
下位層に至ってはご推察の通りかと。
上のライターの話も洗っていくと結局良書の出が鈍いのはユーザ自身のモチベーションの低さに行き当たり、別コメントで語られている本来プログラマ向きで無い人達が流入して溜まっちゃってる、という話に行き着くのかなぁとも思います。
元コメントさんには AndiGutmans, StigBakken の執筆による PHP5 PowerProgramming [php5powerprogramming.com] をお勧めしておきます。
# 某所で似たような事書いた後なので AC
Re:PHPしかできないプログラマー (スコア:1)
悪いとかいうような単純な話ではないわけですね。
PHPを使う業種や出版業界の構造・傾向がプログラマー全体の質の
低下を招いていると。他の言語も多かれ少なかれそういうところは
あるにしても、ちょっと顕著すぎるぞと。
そしてそういう状況を打破しようという運動の一つとして今回のネタの
PHPSCの登場と。
Re:PHPしかできないプログラマー (スコア:1)
良書のご推薦ありがとうございます (^_^) 。結局こういうお話って、行き着くところは「日本のライターの皆さんもがんばれー」になっちゃうんですよね (^_^; 。
海外の良書が和訳されていってくれることに期待しますか。。。(-人-)
むらちより/あい/をこめて。
Re:PHPしかできないプログラマー (スコア:2, 興味深い)
それは言語固有の問題ではないと思います。
去年私が転職して入った会社にも、Java によるウェブアプリしか作れない人がいますが――
と、なかなか手ごわい人です。ちなみに業界経験 4 年。「Java 厨」という言葉があるのを最近知り、妙に納得してしまいました。
# PHP-users メーリングリストの質の低下に嘆いているので AC
Re:PHPしかできないプログラマー (スコア:2, おもしろおかしい)
先日、うちの職場に来ていた某協力会社な人は、職歴が相当おありのご年配なお方で、旧い CAD システムのことなどにも非常に詳しいお方だったのですが、業務用サーバーにユーザー登録する際、パスワードの入力をお願いしたところ、「それじゃあイチ、ニィ、サン、シィ、ゴー、ロク、シチ、ハチ…」などと読み上げながらその通りにキーボードを叩き始め、しかもその翌日にはそんな分かり安すぎるパスワードを忘れちゃうという素晴らしい御仁でした。
その後、腕試しということで、コマンドライン上で動作するちょっとしたプログラムを作ってもらっていたらしいのですが、数時間後、「MFC のマニュアルが無いと作れないんですけど!!」とかお喚きになられたようでしたので、丁重にお帰り願ったんだそうでございます。。。人生いろいろ、プログラマーいろいろ (;_;)/ 。
むらちより/あい/をこめて。
要マニュアルってダメっすか? (スコア:1)
引数の順序とか全部覚えて無いし。
自分の作ったクラスライブラリならほぼ覚えてるし、
ヘッダファイルさえ見れば分かるようにコメントも入れてるけど。
屍体メモ [windy.cx]
「要マニュアル」自体はじぇんじぇんダメじゃないです (スコア:1)
あー、「MFC」が何なのかが分からないとよくわからないネタでした。どうもすみません。
# 実話なんだけどね ;-p 。
むらちより/あい/をこめて。
突っ込みどころはMFCでしたか (スコア:1)
屍体メモ [windy.cx]
Re:要マニュアルってダメっすか? (スコア:1)
Re:要マニュアルってダメっすか? (スコア:2, 興味深い)
if(condition){
...
}
if condition
...
if condition
...
end
if[condition]; then
...
fi
If condition
...
End If
と、色々ありますし
Re:MFC使いの俺に言わせてもらえば (スコア:1)
いろいろ想像されちゃったなぁー (^_^; 。
補足すると、開発環境は Windows で (2000 だったかな?)、Visual Studio .NET 2003 が入っていて、C/C++ で作ってくれ、ということだったので、補足的な用途で MFC を使いたいという可能性は確かにありました。もちろんオンラインマニュアルは F1 ぽちっと押せば見れる環境。
興味深いのは (おいらも人づてに聞いた話なので正確には覚えていないのですが)、AppWizard つかってダイアログのスケルトンを作成し、キー押下だかなんだかのメッセージハンドラを作って、その中で、もしこのキーが押されたら、みたいな if 文を書こうとしていたところで、手が止まっちゃっていたみたいです (そのキーってのが、作ってもらおうとしていたプログラムの、コマンドラインオプションに使ってもらうはずだった文字の一つと同じだったとか何とか)。。。
とりあえずコンパイル通らないし、このまま作らせてもコマンドラインツールにはならなさそうだし、もういいか (ノ ̄∇ ̄)ノ、ってなご判断だったそうで。。。
むらちより/あい/をこめて。
ゲームかよ! (スコア:1)
Z ->爆弾投下
X ->通常弾発射
C ->特殊兵装使用
2 ->下移動
4 ->左移動
6 ->右移動
8 ->上移動
屍体メモ [windy.cx]
もしかして補完機能をつけようとしていたとか (スコア:1)
屍体メモ [windy.cx]
Re:PHPしかできないプログラマー(オフトピ) (スコア:1, 興味深い)
・タブ文字を秀丸で検索するのに\tを使わずタブ文字をコピーする
・「拡張子datって何で開くの?」と聞いてくる
・改行コードがOSによって違うのを知らない
・WindowsのFTPクライアント(ffftp)の使いかたを知らない
しかも、業界歴は僕より上の人たちです。複数、というか、それが周囲では普通。いや、仕事は普通にできるんですけどね。決してダメな人ではない。
まあ、常に必要な知識か、と言われると、結構そうでもないのでしょうけど。
Re:PHPしかできないプログラマー(オフトピ) (スコア:2, 参考になる)
これって、色々あるから聞くんじゃないの?
聞かないで、勝手に開らかねーって言うほうが問題なような気がする。
>・WindowsのFTPクライアント(ffftp)の使いかたを知らない
俺も知らない。使ったことないもん。必要性もないし。
特定のアプリを知っているからどうした?
ということで、問題なのは、
>・改行コードがOSによって違うのを知らない
だけのような?
Re:PHPしかできないプログラマー(オフトピ) (スコア:2, すばらしい洞察)
多分、元コメントの言いたいことは、OS の ftp.exe を強制するのはさすがに気が引けるから ffftp を用意してやったのにそれ「すら」使えねえ、ということなのではないでしょうか?
# 文字コード変換周りを外でやるのが面倒かっただけかも知れないが。
ffftp の使い方を知らないのに「ftp して」って言われたら、普通の IT 土方は ftp.exe 使うのでそもそも問題にならないはずです。
Re:PHPしかできないプログラマー(オフトピ) (スコア:2, すばらしい洞察)
>
>俺も知らない。使ったことないもん。必要性もないし。
>特定のアプリを知っているからどうした?
使ったことがないのを知らないのはごく普通だと思いますが、ffftpはftpが使えるのであれば起動すれば即使えるくらいに使いやすいソフトではないでしょうか。
親コメントの「使えない」が「使おうとしない」の意味であれば人それぞれだと思いますが、起動しても使い方を聞いてくるようであれば「ド素人」の範疇の人だと思います。
李 露星
オフトピごめん (Re:ftp.exe が普通なのか?) (スコア:1)
純粋に知らないので教えて欲しいんですが、IE からの ftp って ascii と image の制御はどうやればいいんでしょう? それさえ分かれば「ftp client は IE でも可」宣言できるんですが。
# そんなの localhost 内でどうにかしろ!
# ていう発想もありかも知れないけれど。
Re:PHPしかできないプログラマー(オフトピ) (スコア:1)
最近はSFTPしか使ってないから、FTP自体使ってません。
自分の使うとこでは、FTPDを立ち上げなくなりました。
そろそろFTPって不要なんじゃない?
Re:PHPしかできないプログラマー(オフトピ) (スコア:1)
> そろそろFTPって不要なんじゃない?
あなたにとっては不要でしょうけども、世の中あなたの
都合だけで動くわけじゃないんです。
Re:PHPしかできないプログラマー(オフトピ) (スコア:1)
少なくともこれは業界暦が長いからこそ、ですね。
昔の秀丸は、\tでは検索できませんでした。 「タブ文字をコピーして検索する」 というのがいわば裏技として存在したのです。
今でもクセでついやってしまいます。
Re:PHPしかできないプログラマー (スコア:1)
Java厨という言葉を知らないというのも人のこと笑えないと思うのは僕だけ?
Javaのメーリングリストや掲示板を見ていれば出会う言葉だと思いますけど。
It's not who is right, it's who is left.
Re:PHPしかできないプログラマー (スコア:1)
逆にJavaのMLや掲示板ってどの辺を想定してますか?
MLはJavaHouse-Brewersくらいしか知らない上に
Webでしか読んでません。最近はほとんど目を通さなく
なりましたが。
厨ってくらいだから掲示板は多分2chを想定してるんだろうけど、
自分は開発系の板は読まないので……そういう人もいるんでないですか。
あとは@IT会議室くらいしか知らないのだけど、
あそこでJava厨という表現は見たことはないです。
他にめぼしいところってありますか?
って書いてから気づいたがオフトピだ……
Re:PHPしかできないプログラマー (スコア:1)
スラド(笑
あ、Javaの掲示板じゃないか。
僕も2chは一切見ないのですが、調べ物があって検索していると
結構2chにヒットするので知りました。
「Java厨」という言葉を見たことがあるかは定かじゃないですが、
「厨」というのが何にでも付くというのは知らず知らずに知ってました。
It's not who is right, it's who is left.
質の低下ではなく誰もがプログラムできるというのは錯 (スコア:0)
その昔、COBOLの外注にABCがの読み書きが怪しいのがいたくらいです。 英語での読み書きじゃあなくて、文字そのものの読み書きとローマ字がおぼつかない。 今でも最低レベルはそのようなもので、 汎用機のCOBOLの事務アプリケーション層に居た人々が、 WindowsとWebのJavaやPHPに移っているので、 レベルの
Re:PHPしかできないプログラマー (スコア:1)
個人的な経験で言うと、C/C++などを知らずにいきなりPHPに入ってきた人は、データ型やバイト単位のデータ処理の概念が希薄なので、DBの設計などをさせても物凄く効率の悪いテーブルを作成してきますね。
また、嘘を書いてる解説書があまりにも多すぎ。明らかに公式ドキュメントに目を通したことの無いような作者が堂々と嘘を書いてる本があります。(これはPHPに限ったことでは無いですが。)
PHPの名誉のために言うと、しっかりしたプログラマーが書いたPHPのプログラムは決して悪いものではありません。ただ、良質のPHPプログラマーは数が少ないですね。 その背景は、WEB製作業の賃金が全体的に下がってきているので質の悪いプログラマーばかりが増えたのと、良質な解説書の不足だと思います。
それでも、良質の会社には良質のPHPプログラマーがいて良質のコードを書いています。
Re:PHPしかできないプログラマー (スコア:0)
VC6以外が出来ても価値が無いみたいなこと、まで平気で言って
こんな所やめた方がいいのかな…
Re:PHPしかできないプログラマー (スコア:0)
プログラマってのも進化しないと簡単に化石になれますんで。
Re:PHPしかできないプログラマー (スコア:0)
Re:PHPしかできないプログラマー (スコア:0)
#誰かあいつらに構造化プログラミングを教えてやって
しゃれにならないのでAC
本当に助かります。 (スコア:2, すばらしい洞察)
有名なIPA ISEC セキュア・プログラミング講座 [ipa.go.jp]では、PHPはないですしね。
現在とあるサイトでクリティカルなバグを見つけてIPAに依頼中です。
そのサイトは全体的に入力チェックという概念が欠如しているとしか思えないのです。
# その割りにRefererチェックは無駄にしてたりする。
# あんなの飾りにしかならないのに。
サンプルが豊富にあるのは良いのですが、セキュリティに考慮していない動作するだけのサンプルを適当に繋ぎ合わせてしまえば見た目が完成してしまいセキュリティバグを生んでいる状況な気もします。
というわけで、こういったセキュリティの問題を言語に近いところが啓蒙してくれると助かります。
特にその言語固有の問題(PHPならRegister Globals等)があると助かります。
言語の開発元が必要な事なんだと大きな声で言えば、彼らもやらなきゃいけないとそのうち理解してくれると思います。
まぁ、そのうちじゃもう手遅れなんですけど。
# 中身でバレてそうだけどACで
Re:本当に助かります。 (スコア:5, 参考になる)
perl のように「汚染された(Tainted)」という概念が無いのが一番問題な気がします。
PHP で可能な事と言えば
ユーザからの入力を表示する時は htmlspecialchars() を利用する。
# stripslashed() や addslashes() や quotemeta() の利用も。
mysql に渡すユーザの入力は mysql_escape_string() する。
# postgresql なら pg_escape_string(), pg_escape_bytea() とか。
このぐらいかな。
他にも行なった方が良い事ってありますか?
Re:本当に助かります。 (スコア:5, 参考になる)
> # postgresql なら pg_escape_string(), pg_escape_bytea() とか。
私の処ではこれも禁止して、バインド変数を強制してます。
バインドできないDBMSもあるので、PEARのDBが必要になりますが。
# 必ずescapeとquoteしろと指示しても、絶対に抜けや
# 2重espace/unescapeやる奴が出るので。
後、外部コマンドの起動も、上級者の書いたwrapperを経由させてます。
結局、ダメな奴はなにを教えても業務命令出しても守らないので、
クリティカルな所は、バグを出しようがない環境を作ってやった
方が、こちらも精神的に楽です。
# 特定の関数は指定した一部のファイルからしか使えなくする拡張があるといいんですけどねぇ...
wild wild computing
穴を憎んで人を憎まず (スコア:1)
日常の小物をすべて PHP で書いている身としては非常に有益な話だと思います。
お手軽言語だけにいい加減なプログラムが増えやすい傾向はあるんだろうけど、プログラマをけなすだけの投稿は避けて欲しいな>/.er のみなさん
# たぶんお互いに得るものが少ないと思うので。
[わかってもらうことは難しい。わかってあげることは、もっと難しい。]
Re:穴を憎んで人を憎まず (スコア:1, 参考になる)
いい加減なプログラミング事例の書き込みを見て、俺は大丈夫だろうか、
後輩は大丈夫だろうかと再確認する事は非常に有用だと思うのですが。
あくまでも反面教師として読みましょう。
#え?書かれた内容の事?書いた人の事?
Re:穴を憎んで人を憎まず (スコア:2, おもしろおかしい)
> 後輩は大丈夫だろうかと再確認する事は非常に有用だと思うのですが。
先輩についてはもうあきらめてるんですね。
suExec (スコア:1)
屍体メモ [windy.cx]
ユーザ間でデータの漏れが (スコア:1)
屍体メモ [windy.cx]
とりあえず (スコア:1)
Re:とりあえず (スコア:1, おもしろおかしい)
{死}{栄光の凱旋マーチ}
Re:とりあえず (スコア:1)
php自体をもっとセキュアに (スコア:0)
正直PHPの脆弱性発生頻度と開発スピードは早くて、
メンテナンス的に辛いと思っています。