2013-07-24 71 views
1

存在一些安全原因,我想阻止訪問類中的常量。我該怎麼做?如何防止樹枝上的常量?

注意:可以通過下面的代碼訪問常量。

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

我的猜測是你不能,因爲'const'在PHP中是公共的......你想隱藏什麼樣的值? – cheesemacfly

+0

@cheesemacfly謝謝你的回答。必須有辦法來阻止它。我希望有人會回答:) –

+2

你可以[重載](http://twig.sensiolabs.org/doc/advanced.html#overloading)在樹枝中的'constant()'函數。似乎認真像一個骯髒的把戲壽... – cheesemacfly

回答

1

沙箱爲n治癒。因爲在系統中用戶寫他自己的模板,這帶來了安全問題。

由於這個原因,擴展功能覆蓋可能是一個很好的解決方案。

$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

螞蟻的結果是好的,沒有在畫面中沒有輸出,沒有任何的沙盒使用。 (解決方案在後端)

希望這有助於。

1

我相信你可以用沙箱擴展做到這一點: http://twig.sensiolabs.org/doc/api.html#sandbox-extension

此擴展允許您定義主要有功能,標籤,過濾器白名單的移動安全策略......

您可以啓用沙盒模式全局,或只是使用沙盒模式爲特定的包括(默認行爲):

{% sandbox %} 
    {% include 'user.html' %} 
{% endsandbox %}