我想把这个-
<b>Hello</b> World, <script>alert("xss")</script>
作为-
Hello World,警报(“xss”)
当前使用ngSanitize并使用ng-bind-html时,它呈现为
Hello World,
我不想完全剥离脚本标记,但不想以html的形式执行它(同时执行安全的html)。
发布于 2018-09-08 07:00:58
这是设计造成的不可能。您不能装饰ngSanitize以接受<script>标记。如果您查看其他需要特殊或扩展的ngSanitize功能的指令,它们会提供自己的替换。例如,text-angular。
警告,你自己承担风险!
如果您确实需要接受<script>标记和可运行的JS,请打开angular-sanitize.js文件并查找
var blockedElements = toMap('script,style');在第268行的v1.6.9。代之以
var blockedElements = toMap('style');现在必须将script添加到内联元素列表中,在第255行的v1.6.9中
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")将在页面加载时被触发。
https://stackoverflow.com/questions/52228625
复制相似问题