2014-10-30 26 views
0

在自定義的Twig函數中逃脫XSS的方法是什麼?避免自定義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

該文檔是不夠的? http://twig.sensiolabs.org/doc/filters/escape.html與'| e'? – fluminis 2014-10-30 14:37:44

+0

@fluminis在樹枝很新。好吧,我可以這樣做'{{greating(「」)| escape}}',但是我怎樣才能將它整合到函數中呢? – sdespont 2014-10-30 14:42:23

回答

1

你可以阻止這樣的腳本從把頭髮由就像樹枝逃生過濾器htmlspecialchars包裝名稱在內部使用:

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

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

內部,逃生使用PHP本地htmlspecialchars功能的HTML轉義策略。