存在一些安全原因,我想阻止訪問類中的常量。我該怎麼做?如何防止樹枝上的常量?
注意:可以通過下面的代碼訪問常量。
{{ constant('Entity\\Demo::MY_CONSTANT') }}
存在一些安全原因,我想阻止訪問類中的常量。我該怎麼做?如何防止樹枝上的常量?
注意:可以通過下面的代碼訪問常量。
{{ constant('Entity\\Demo::MY_CONSTANT') }}
沙箱爲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
螞蟻的結果是好的,沒有在畫面中沒有輸出,沒有任何的沙盒使用。 (解決方案在後端)
希望這有助於。
我相信你可以用沙箱擴展做到這一點: http://twig.sensiolabs.org/doc/api.html#sandbox-extension
此擴展允許您定義主要有功能,標籤,過濾器白名單的移動安全策略......
您可以啓用沙盒模式全局,或只是使用沙盒模式爲特定的包括(默認行爲):
{% sandbox %}
{% include 'user.html' %}
{% endsandbox %}
我的猜測是你不能,因爲'const'在PHP中是公共的......你想隱藏什麼樣的值? – cheesemacfly
@cheesemacfly謝謝你的回答。必須有辦法來阻止它。我希望有人會回答:) –
你可以[重載](http://twig.sensiolabs.org/doc/advanced.html#overloading)在樹枝中的'constant()'函數。似乎認真像一個骯髒的把戲壽... – cheesemacfly