Twig:允许 HTML,但转义脚本

Twig: Allow HTML, but escape script

我正在调查我的应用程序可能的 XSS 攻击媒介。

我有:

我使用该表格插入以下内容:

<b>Some valid HTML text</b>
<script type="text/javascript">alert("XSS")</script>

查看该数据需要转义。在转义数据时,我熟悉的策略很少。

1) raw 过滤器:完全禁用转义 -> 引入可能的 XSS

2) e 过滤器:

3) {{ var|striptags('<br>')|raw }}, 输出: Some valid HTML text alert("XSS")

这个很管用,但我不喜欢它。我宁愿寻找黑名单解决方案,而不是白名单。

现在问题:

是否有任何其他转义策略允许 html 标签但像 e("js") 过滤器那样转义 <script> 标签?

我应该在表单提交期间或 Twig 呈现期间 "kill" 脚本吗?

我建议添加一个适合您需要的新 Twig 过滤器。

它应该看起来像

{{var | filter_black_listed() }}

并在过滤器逻辑中添加类似

的内容
class FilterBlackListedExtension extends \Twig_Extension
{
    private $blacklistedTags = ['script', 'p'];

    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('filter_black_listed', array($this, 'htmlFilter')),
        );
    }

    public function htmlFilter($html)
    {
        foreach ($this->blacklistedTags as $tag) {
            preg_replace('/(<' . $tag . '>)(.*)(<\/' . $tag . '>)/g', '', $html);
        }

        return $html; // maybe even apply the raw filter also afterwards.
    }

    public function getName()
    {
        return 'filter_black_listed_extension';
    }
}

如果您无法完成这项工作,请告诉我:)