1

ユーザーがtextareaにMustacheマークアップを入力し、 mustache.phpとクラスベースのコンテキストを使用して出力を生成できるアプリを構築しています。

コード例:

<?php
$m = new Mustache_Engine;
$chris = new Chris;
echo $m->render($CUSTOM_USER_INPUT_TEXT, $chris);

クラスコンテキストの例:

<?php
class Chris {
    public $name  = "Chris";
    public $value = 10000;
    private $test = '';

    public function taxed_value() {
        return $this->value - ($this->value * 0.4);
    }

    public $in_ca = true;
}

Chris私の質問:パブリックメソッドとプロパティを除いて、ユーザーが他の関数を呼び出すことができる可能性はありますか?(口ひげのマークアップから)

ありがとうございました。

4

1 に答える 1

4

はい、レンダリングコンテキストを注意深く制御すれば、ユーザー入力をレンダリングしても安全です。ユーザーは、レンダリングコンテキスト内のオブジェクトのパブリックプロパティとメソッドにのみアクセスできます。

ユーザーにアクセスを許可するものに注意してください。トラバースできる任意のオブジェクトに対して任意のメソッドを呼び出すことができます。たとえば、Chrisがで公開されている車を持っている場合Chris::$car、彼らはでそれに到達できます{{ chris.car }}。つまり、ActiveRecordスタイルのドメインモデルを使用する場合は、モデルオブジェクトをレンダリングコンテキストに渡さないでください。それ以外の場合、ユーザーはを呼び出すことができます{{ chris.car.delete }}

于 2012-11-13T16:07:49.060 に答える