在自定义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警报。我怎么能避免这个?
答案 0 :(得分:1)
您可以通过将名称包装在htmlspecialchars
中来防止这样的脚本被放入,就像twig转换过滤器在内部使用一样:
public function greating($name)
{
return "Salut ".htmlspecialchars($name);
}
http://twig.sensiolabs.org/doc/filters/escape.html
在内部,escape使用PHP本机htmlspecialchars函数进行HTML转义策略。