PDOがPDOExceptionを投げてくれない件

PHP5だからってことでせっかくPDOを使ってるのに、全然PDOExceptionを投げてくれない!
errorCode()とかerrorInfo()なんてメソッドつかってたら、結局pgsql関数使ってるときと一緒じゃん!
と嘆いていたのは僕ですが、
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION)
てやっとけばいいみたい。
@see PDO->setAttribute()

これで

PDO のエラーコードは、SQL-92 の SQLSTATE エラーコード文字列に 標準化されています。 ネイティブのコードを適切な SQLSTATE コードに変換するのは、個々の PDO ドライバの仕事となります。

こういう恩恵をたっぷり受けることができる!(ホント?)

蕎麦屋について

最近語られなくなった気がするので蕎麦屋について書いておきます

そばの出前の注文を受けた後の催促の電話に対して、その人の分のそばを茹でながら「さっき出ましたから、もうすぐ着くと思います」というのがネタ元

ソフトウェア開発の現場ではこれらを応用し
・「プログラムは出来てるんですが、ちょっとお見せする環境を整えるのに時間がかかるのでもうしばらくまってください」と言いつつプログラムを書きはじめる
・「プログラマはメールで送った言ってるんですが、届いてないですか?添付ファイルが大きすぎたのかもしれませんね。今はちょっとつかまらないので、また後で連絡します」と言いつつ書かせる
などといったことが日常的に行われているのかもしれません

テンプレートシステムはデフォルトでエスケープするべきじゃなかろうか?

mixiに機能要望の投票とトラッキングがついたらしいので、個人ごとにタイムゾーン設定できるようにってのに投票しました。
# 現時点で評価は 良い94/悪い4 なんだけど、いつになったら検討されるのかさっぱり謎です。

で、他にどんな面白い要望があるんだろうかとブラウズしたりして、ふと実装済のところを見てみると、XSS脆弱性の修正が並んでる・・・
しかも、「mixi機能要望におけるXSSの問題を根本的に修正してほしい」なんてのを筆頭に、最近リリースされてる機能にも平気でXSS脆弱性があった模様。

いまどきリリースされるwebアプリでも、XSS脆弱性はゴロゴロしてるのね。
まあ、そこらのサンプルコードや入門書にXSS脆弱性やSQLインジェクションがゴロゴロしてるのは知ってましたが、mixiでリリースされてるアプリケーションでも未だにゴロゴロしてるとは、ちょっとびっくりです。

mixiのシステムはおいといて、ふと思ったのが「テンプレートシステムはデフォルトでエスケープするべきじゃなかろうか?」ってこと。

DBなどに入力値をそのまま持っておく設計(極めてフツーだけど)のwebアプリケーションだと、たとえばsmartyなら、HTMLを保存しているもの以外の全ての変数表示項目で{$hogehoge|escape}として、エスケープする必要があります。
「ちゃんとエスケープしろよ」といっちゃえばそれまでなのですが、テンプレートってのはwebデザイナーさんもいじることがあるわけで、webデザイナーさんがescapeを忘れちゃったり間違えて取っちゃったりする可能性ってのは十分あるわけです。

このあたりの危うさを考慮すると、テンプレートシステムではデフォルトでエスケープするほうが安全だし、コードの量も減るでしょうね。