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 回答