如何防止访问树枝中的常量?

时间:2013-07-24 16:14:52

标签: twig

有一些安全原因,我想阻止访问树枝中的类常量。我该怎么办?

注意:可以使用以下代码访问常量。

{{ constant('Entity\\Demo::MY_CONSTANT') }}

2 个答案:

答案 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结果很好,屏幕上没有输出,没有任何沙箱使用。 (解决方案在后端)

希望这有帮助。