いくつかのセキュリティ上の理由があり、twig のクラス定数へのアクセスを防止したいと考えています。どうすればいいですか?
注:以下のコードで定数にアクセスできます。
{{ constant('Entity\\Demo::MY_CONSTANT') }}
いくつかのセキュリティ上の理由があり、twig のクラス定数へのアクセスを防止したいと考えています。どうすればいいですか?
注:以下のコードで定数にアクセスできます。
{{ constant('Entity\\Demo::MY_CONSTANT') }}
サンドボックスは治療法ではありません。システムではユーザーが独自のテンプレートを作成するため、セキュリティ上の問題が発生します。
そのため、拡張機能での関数のオーバーライドが適切な解決策になる場合があります。
$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を参照してください。
結果は良好です。サンドボックスを使用せずに、画面に出力はありません。(ソリューションはバックエンドにあります)
お役に立てれば。