タグのアーカイブ: smarty (RSS)

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

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

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

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

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

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

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