使用html_sanitize()防止删除<link />

时间:2016-11-09 05:37:06

标签: javascript html html-sanitizing

为了安全起见,我在客户端使用html_sanitize()来清理HTML。但是,不同元素的风格与我在消毒之前收到的风格不同。我需要保留标签中的内容,并且我试图弄清楚如何。

例如,我收到以下HTML:

<div>
<link href="style.css" rel="stylesheet" type="text/css" />
<script> alert('Blah');</script>
<a class="btn-active"></a>
</div>

和html_sanitize(bodyHtml,urlX,idX);返回:

<div>
<a class="btn-active"></a>
</div>

理想情况下,我希望将链接标记与其他所有内容保持一致。像这样。

<div>
<link href="style.css" rel="stylesheet" type="text/css" />
<a class="btn-active"></a>
</div>

我一直试图在任何地方找到解决方案,但我无法做到。我还查看了文档,实现了自定义策略,但即便如此,我也无法控制脚本标记被删除。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:0)

根据documentation,您可以执行以下操作:

// Allow only a super restricted set of tags and attributes
clean = sanitizeHtml(dirty, {
  allowedTags: [ 'link' ],
  allowedAttributes: {
    'link': [ 'href','rel','type' ]
  }
});

使用dirty = document.documentElement.innerHTML;(例如)。

您当然要dirty更改clean以完成工作:

document.documentElement.innerHTML = clean;