如何使用angular-sanitize不从html中删除iframe标签

时间:2014-03-17 08:13:53

标签: html html5 angularjs

我使用的是textangular,它使用angular-sanitize来解析html。

我正在尝试使用iframe标记嵌入视频,但是当textangular调用angular-sanitize到parsehtml时会删除这些视频。

我应该如何更改角度清理以允许iframe标签用于例如链接到youtube视频?

或者我应该如何在我的HTML中嵌入视频?

2 个答案:

答案 0 :(得分:6)

这就是我做到的。

textAngular使用单独的sanitize js文件textAngular-sanitize.min.js。

即使它被缩小,打开它,你会发现标签组;寻找这个:

A=b.extend({},x,e("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,script,section,table,ul"))

只需添加iframe标记

即可
A=b.extend({},x,e("address,article,aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,h6,header,hgroup,hr,iframe,ins,map,menu,nav,ol,pre,script,section,table,ul"))

我保持按字母顺序排列。

这使得它安全",问题解决了。

答案 1 :(得分:1)

一个选项可能是在您清理文本之前更改文本,然后再将其更改回来。类似的东西:

var text = 'some text <iframe></iframe> some more text';
text = text.replace('<iframe', '[[iframe');
text = text.replace('</iframe>', '[[/iframe]]');
text = sanitize(text);
text = text.replace('[[iframe', '<iframe');
text = text.replace('[[/iframe]]', '</iframe>');

但是,通过这样做,您可以在使用iframe嵌入YouTube视频时自行开放攻击。您应该做的是提出一些内部BBCode,您可以在打印之前将其替换掉。也就是说,在您对其进行清理后,您可以让用户传递[youtube video_id=ZZZ]替换为iframe的内容。