我想渲染这个-
你好世界,
为-
你好世界,
虽然当前使用ngSanitize,并且使用 ng-bind-html
,但它呈现为
你好世界
我不想完全剥离脚本标签,但不想以html格式执行(在执行安全html时)
答案 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")
。