为什么AngularJS在使用ng-bind-html时会删除数据属性?

mkh*_*tib 6 html javascript escaping angularjs

我正在使用contentEditable div来使用户能够格式化他们的文章.我对html内容进行了一些处理并坚持下去.

ng-bind-html当观众想要阅读文章时,我用它来渲染结果.我不想使用,$sce.trustAsHtml因为我仍然希望AngularJS清理用户输入,因为我不信任所有输入.我想要的只是AngularJS清理以允许元素的一些属性.它似乎剥离了ID和数据属性.(但保留课程和头衔).

数据属性是否有害?攻击者如何使用它们来攻击最终用户?有没有办法安全地使用它们,让Angular不会剥离它们?

这是一个例子:

article.body = '<p data-guid="afasfa-afasfafas-faf-asasf" class="guid-tagged">Yes this is my article</p>';
<article ng-bind-html='article.body'></article>
Run Code Online (Sandbox Code Playgroud)

这是文章标签内的Angular输出(注意剥离的数据属性):

<p class="guid-tagged">Yes this is my article</p>
Run Code Online (Sandbox Code Playgroud)

谢谢

小智 3

正如评论中提到的,ng-bind-html通过消毒器传递数据。该清理程序从传入的所有输入中删除许多属性。这个问题可能有助于解释更多:ngSanitize issues关于白名单属性。这部分源代码包含所有被认为有效的属性,因此 ngSanitize 未触及。