まず根本的な話として、PHPはセキュリティに強い。もちろんいろいろ問題はあるが(ていうかけっこうあるが)、html専用のエスケープする基本関数がある言語なんてあんまりないわけだし。
問題がよく起こるのは技術者のレベルが低いことと、つまりPHPアプリに金を払っていないことが原因だ。と思う。
あとそれ以上に、業務系のJAVAのアプリとかだと、外の人が見ないからセキュリティホールがあっても気づかないのです。ていうか本当はきっとあるのです。
別に、問題なんて普通起こらないわけですよ。表示するものはすべて例外なく、表示の直前にhtmlspecialchars、SQLにはすべて例外なくプリペアドステートメントを使う、それだけのこと。
……で防げない場合ももちろんあるけど。ほんとにこれだけではないのでアレです。信じないで。
でも、よくおきるインジェクションの問題は、もちろん、上の基本以前のところで起きているわけで。
別にそれほど変な記事じゃないのに、というかどちらかといえばまあいいほうの記事という気もするのになんでわざわざ反論してるかというと、イヤなことが書いてあったから。
入力文字列は厳格にバリデーション
これが。他にもあるけど特にこれ。
完全に作る側の理屈なんですよこれ。
そういうことをいっていると、わたしの嫌いな「住所の全角チェック」が生まれてきてしまうわけです。住所には数字も英語も入るんだから、全角チェックをしていいはずがないのに。
問題を防ぐために厳格にやるという方法は間違いだ。そのために使い物にならなくなってるシステムがどれだけあるか。
それになにより、手順が増えればそれだけミスも増える。バリデーションがセキュリティホールを生み出すときもある。厳しいバリデーションは問題の先送りにすぎない気がする。
結論は、エラーメッセージ表示するのが面倒だなあという話。でこのサイトのセキュリティがどうかというと(ry