テンプレートを利用してページを表示する際に、Smarty 修正子の escape をデフォルトの modifier として登録したりする。
何も考えずに escape:html とかすると問題が起きる場合がある。実体参照を含む文字列を assign して、それを escape すると2回エスケープ処理を行う事になるので、実体参照の先頭にある & がエスケープされて実体参照がそのまま表示されてしまう。
注意力の問題かもしれないけど、なんだか納得できない。HTML 文字列は2つ(?)の状態を持つってのがややこしいのかな?つまり、レンダリングされた時の文字列と、ソースとしての文字列。HTML を扱う際は、必ず HTML 型を利用して、場面に合わせてデータを取得するっていうアプローチを貫けば面倒も無いかな、と。
よく触る PHP だと、htmlspecialchars っていうエスケープ関数がある。これを使いましょうっていうのがそもそもいけないんだ。いや、正しいんだけど、実際にこれを適用する部分は隠蔽しておいて、何かの処理を書く時には HTML 型からインターフェース経由でデータを取ってきたらいい。
インジェクションがどうこうって話はよく聞くんだけど、それを考慮した型(クラス)が用意されていてそれを使いましょうって話は聞かない。こういう関数があるから、それ使いましょうって話はよく聞くけど。
別に DOM がどうこうって部分は考えてなくて、純粋に文字列として表現される(修飾されない)部分を扱う際に、『考える』労力を減らすべきかなぁ、と。コーディングルールとかプロジェクトルールとかで決めておけば済む話かもしれないけど、ちょっと気になったもんでメモ。
…、間違ってる?んー、わからん。いい事ありそうな気がするんだけど。どうも、こういう初歩的っぽい事ほどよく分かってない気がする。 new が増えるのは良くないのかな?

