2013-09-16 268 views
1

我在哪里,我们要筛选客户端的聊天记录清除聊天应用工作的宣誓词和HTML,从我可以告诉在Angular 1.2.0-rc2 ng-bind-html应自动清除您传递给它的任何文本。另外,从我看到的文档,你可以通过$sce.trustAsHtml(input)到NG-绑定HTML(理论上),因为他们在1.2.0删除ng-bind-html-unsafe渲染HTML。错误抛出

我的问题是在我的jsfiddle我没有看到NG绑定,HTML干净的HTML。我可以通过一个字符串链接到ng-bind-html,它会呈现链接。我想在一个短的代码过滤工作(因此管理员可以做一些事情来的[url|http://google.com|Google]的影响,并有其生成的HTML包裹在$sce.trustAsHtml(input)

这是我的jsfiddle:http://jsfiddle.net/pa4XV/

你可以看到,我有上$scope以下:

$scope.chats = [ 
    {from: 'test', message: 'Chat Message 1'}, 
    {from: 'test', message: 'Chat Message 2 <a href="http://facebook.com">Facebook</a>'}, 
    {from: 'test2', message: 'Chat Message [url|http://google.com|Google]'} 
]; 

我期望第三消息来显示一个链路和第二消息发送到由NG-结合 - HTML(因为它不会由$sce包裹)被捕获,但在小提琴我我看到两者都被渲染,这非常混乱因为这不是我在代码中看到的行为。我的Fiddle和我的代码之间唯一很大的区别是$ scope.chats来自Firebase,而不是硬编码,我的shortTags过滤器有代码包装它检查用户是否是主持人(它只替换mod的短标签)。

有一个很高的可能性,我做这个“错误”或有更好的方式来做这种事情的角度(我开始与$ watchCollection添加.safeMessage参数,但导致循环,这我现在明白了),如果这是更好的方式,我很乐意以不同的方式解决这个问题。感谢您的任何帮助,您可以提供!

+0

事情已经出了问题你的小提琴,这似乎是空的。 – DoctorMick

+0

@DoctorMick谢谢你,更新! http://jsfiddle.net/pa4XV/ – JoshStrange

+0

我相当肯定,所有ng-bind-html“清除”都是脚本标记和可能导致可能的XSS攻击的事情,这可能解释了为什么您的链接仍在显示。通过使用$ sce,你可以说XSS不是一个问题,并且内容是可信的(当然,聊天消息并不是这样)。这是一个小问题22,因为如果你不使用ng-bind-html,你会让所有的东西都逃脱,但是它没有任何东西可以逃脱。你可能需要你自己的指令来渲染内容,并在应用你的shortTags过滤器之前调用$ sanitize(而不是$ sce),但肯定有人有一个短标签库? – Kato

回答