忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2017/10/17 14:50 |
Smarty-08:テンプレート変数

Smartyインスタンスをvar_dump()するとわかりますが、Smarty::assignした変数はSmarty::_tpl_varsに入っています。
で、Smarty::_tpl_varsはPHP4互換のためvarで宣言されているので外部から書き換えが可能です。

さて、これで何が便利かというとテンプレート内から配列にアサインしたい場合です。

テンプレート内で変数をアサインすることができます。

{assign var='title' value='hoge'}
{$title}


とすると$titleで'hoge'を表示することができます。
ところがこの{assign}、実は配列をアサインすることができません。
そんな場合に{assign}が覗いている先を直接書き換えてしまいます。

{php}
 $this->_tpl_vars['aaaa'] = array('aa'=>'hoge','bb'=>'fuga');
{/php}


これで{$aaaa.aa}で'hoge'を表示することができるようになりました。

まあ、そもそもテンプレート内で配列をアサインするような設計になっている時点でどこかがおかしいんですがね。

ここで出てくる{php}ですが、これは{php}{/php}で挟まれた部分をPHPとして解釈するという極めて危険な関数です。
これを使用した時点でSmartyの役目が台無しです。
というわけで、$smarty->security=true;とすると使用を禁止することができます。

これで安全といえば安全なのですが、同時にPHP関数の修正子も使用できなくなってしまいます。
使用できるのはpluginsフォルダに入っている、カスタム修正子を含めた修正子だけとなります。
{$text|substr:5:10}とかも使えなくなってしまうのが少々困りもの。

{php}だけ禁止して他はおっけーとかの設定はできんものかのう。

PR


2009/08/28 15:39 | Comments(0) | TrackBack(0) | PHP

トラックバック

トラックバックURL:

コメント

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<RFI脆弱性 | HOME | Smarty-07:Smartyのフォーム関数>>
忍者ブログ[PR]