1

いくつかのセキュリティ上の理由があり、twig のクラス定数へのアクセスを防止したいと考えています。どうすればいいですか?

注:以下のコードで定数にアクセスできます。

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

2 に答える 2

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を参照してください。

結果は良好です。サンドボックスを使用せずに、画面に出力はありません。(ソリューションはバックエンドにあります)

お役に立てれば。

于 2013-07-30T09:21:47.823 に答える