在自定义Twig功能中避免XSS


Avoid XSS in custom Twig function?

在自定义Twig函数中转义XSS的最简单方法是什么?

考虑一下:

class TwigExtension extends 'Twig_Extension
{
    public function getName()
    {
        return 'html_helpers';
    }
    public function getFunctions()
    {
        $options = array(
            'is_safe' => array('html')
        );
        return array(
            new 'Twig_SimpleFunction('greating', array($this, 'greating'),$options)
        );
    }
    public function greating($name)
    {
        return "Salut ".$name;
    }  
}

模板中的调用:{{ greating("<script>alert('Sébastien')</script>") }}

它将显示JS警报。我该如何避免这种情况?

您可以通过将名称包装在htmlspecialchars中来防止类似的脚本被放入,就像树枝转义过滤器在内部使用的那样:

public function greating($name)
{
    $escapedName = htmlspecialchars($name);
    return "Salut {$escapedName}";
} 

http://twig.sensiolabs.org/doc/filters/escape.html

在内部,escape使用PHP本机的htmlspecialchar函数作为HTML转义策略。