我正在构建一个应用程序,用户能够在文本区中输入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公共方法和属性之外,用户是否有可能调用其他函数?(来自八字胡标记)
谢谢。
发布于 2012-11-14 00:07:49
是的,呈现用户输入是安全的,只要您仔细控制呈现上下文。用户只能访问呈现上下文中的对象的公共属性和方法。
只是要小心你给你的用户访问的内容。他们将能够在他们可以遍历到的任何对象上调用任何方法。例如,如果克里斯有一辆车,暴露在Chris::$car上,他们可以通过{{ chris.car }}获得它。这意味着如果您使用ActiveRecord样式的域模型,则永远不应该将模型对象传递到呈现上下文中。否则,用户可以调用{{ chris.car.delete }}。
https://stackoverflow.com/questions/13362615
复制相似问题