在自定义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转义策略。