ngSanitize保留<script>标签

时间:2018-09-07 19:32:21

标签: angularjs xss

我想渲染这个-

你好世界,

为-

  

你好世界,

虽然当前使用ngSanitize,并且使用 ng-bind-html ,但它呈现为

  

你好世界

我不想完全剥离脚本标签,但不想以html格式执行(在执行安全html时)

1 个答案:

答案 0 :(得分:0)

根据设计,这是不可能的。您不能修饰ngSanitize来接受<script>标签。如果您查看其他需要特殊或扩展ngSanitize功能的指令,它们会提供自己的替代品。例如text-angular


警告,后果自负!

如果确实需要接受<script>标签和可运行的JS,请打开angular-sanitize.js文件并查找

var blockedElements = toMap('script,style');
在v1.6.9中围绕268行

。替换为

var blockedElements = toMap('style');

现在,您必须在第255行中的v1.6.9中将script添加到内联元素列表中

var inlineElements = extend({}, optionalEndTagInlineElements, toMap('a,abbr,acronym,b,script,' + ...

最后,您必须避免清理将({之类的字符转换为十六进制实体。在第478行附近寻找function encodeEntities(value) {,将其注释掉

/*
replace(NON_ALPHANUMERIC_REGEXP, function(value) {
  return '&#' + value.charCodeAt(0) + ';';
}).
*/ 

现在,<b>Hello</b> World, <script>alert("xss")</script>将被接受,并且在页面加载时将触发alert("xss")