在自定义Twig函数中避免使用XSS?

时间:2014-10-30 14:34:31

标签: php function symfony twig

在自定义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警报。我怎么能避免这个?

1 个答案:

答案 0 :(得分:1)

您可以通过将名称包装在htmlspecialchars中来防止这样的脚本被放入,就像twig转换过滤器在内部使用一样:

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

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

  

在内部,escape使用PHP本机htmlspecialchars函数进行HTML转义策略。