有一些安全原因,我想阻止访问树枝中的类常量。我该怎么办?
注意:可以使用以下代码访问常量。
{{ constant('Entity\\Demo::MY_CONSTANT') }}
答案 0 :(得分:1)
我相信您可以使用Sandbox扩展程序执行此操作: http://twig.sensiolabs.org/doc/api.html#sandbox-extension
此扩展程序允许您定义一个基本上具有功能,标签,过滤器白名单的安全策略......
您可以全局启用沙箱模式,或者只使用沙箱模式进行特定包含(默认行为):
{% sandbox %}
{% include 'user.html' %}
{% endsandbox %}
答案 1 :(得分:1)
因此,在扩展中覆盖功能可能是一个很好的解决方案。
$environment = new Twig_Environment($loader, array('autoescape' => self::$_autoEscapeOpened));
$myTwigExtension = new MyTwigExtension();
//note that MyTwigExtension extends Twig_Extension
$environment->addExtension($myTwigExtension);
//here is MyTwigExtension
class MyTwigExtension extends \Twig_Extension {
//in my twig extension, there is a method called getFunctions. If not, write one.
public function getFunctions() {
$functions = array(
new \Twig_SimpleFunction('constant', array($this, 'constant')),
);
return $functions;
}
//and add the customized constant function in your extension here!
public function constant($variable){
return '';
}
}
如果您不想使用扩展程序,请参阅http://twig.sensiolabs.org/doc/advanced.html#functions
Ant结果很好,屏幕上没有输出,没有任何沙箱使用。 (解决方案在后端)
希望这有帮助。