Smartyでescape

PHPのhtmlspecialcharsにはENT_QUOTESを付ける

例えば、htmlspecialchars した値は安全だとして、Smarty などで次のように値を割り当てたとすると危険です。 <a href="http://phpspot.net/php" onclick="javascript:alert('{$assigned}');">test</a> 例えば、$assigned 変数に、「');alert(document.cookie+'」なんていう値がはいっていたらcookieがalertされてしまいます。 <>だけエスケープしておけば大丈夫、ということはいえなくなってしまいます。


うーん。

なぜ、素直に {$assigned|escape} を使わないのか?
ってか、PHPの仕事でもここ2年ばかりはSmartyありきなのでhtmlspecialchars なんて殆ど使ってないぞ。
(引数がシンプルじゃないから)
というか、JavaScriptなんていうデリケートな部分に(POST、GET、SessionにしろDBからの値にしろ)ユーザの入力値をそのまま表示するなんてどんな状況?

ここ最近話題になっている、「PHPは初心者にやさしい。その反面穴だらけなアプリケーションが量産される」という文節を見て、「うーん」と思っているところにこれかぁ。。。