XoopsX / legacy

XOOPS Cube Legacy base repository
15 stars 11 forks source link

smartyはデフォルトでhtmlエスケープ出力したほうがいい? #80

Open kujiy opened 8 years ago

kujiy commented 8 years ago

xoopsのsmartyは生の値?を出力するのがデフォルトなので、htmlタグをそのまま出力する場合は自前でescapeする必要があります。

例1:

<{$var | escape:'html'}>

これはセキュリティに問題を抱えたコードが生まれやすい仕様のため、

<?php
$xoopsTpl->default_modifiers = array('escape:"html"');

などとしてデフォルトをエスケープにして、あえてhtmlタグ等をそのまま出したい場合だけ

<{$var | smarty:nodefaults}>  // または no_enc など独自にわかりやすいものを作る

とする仕様が、(一長一短ではありますが)基盤となるCMSの仕組みとしてはいいように思います。

・・ということが社内で話題になったのですが、一般的には/xoopsの方針としてはどうなんでしょうか。(自分一人なら自動エスケープは使わないですが、セキュリティに弱いコーダーも入り交じるOSSの場では自動エスケープをデフォルトにしたほうがいいように感じます。)

可能であればどなたかのご意見を伺いたく思います。いかがでしょうか。

kilica commented 8 years ago

僕はだいたい取得したテーブルのデータなどを格納するオブジェクトとして XoopsSimpleObject クラスを継承したクラスを使っていて、その場合、

<{$object->getShow('name')}>

でエスケープされた値を出しています。 何らかの理由で生値を出したい場合は

<{$object->get('name')}>

を使います。

一般論としては、kujiyさんの書かれているとおり、何も指定しなければ espace のほうが安全かなと思います(最近のフレームワークなどはそうなっているのが多いような)。