代码之家  ›  专栏  ›  技术社区  ›  vishesh

ngSanitize preserve<script>标记[关闭]

  •  0
  • vishesh  · 技术社区  · 8 年前

    我要渲染这个-

    <b>Hello</b> World, <script>alert("xss")</script>

    作为-

    你好

    而目前使用的是ngSanitize ng-bind-html

    你好

    我不想完全剥离脚本标记,但不想将其作为html执行(同时执行安全的html)

    1 回复  |  直到 8 年前
        1
  •  0
  •   davidkonrad    8 年前

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


    警告,风险自负!

    <脚本> angular-sanitize.js 归档并查找

    var blockedElements = toMap('script,style');
    

    var blockedElements = toMap('style');
    

    现在你必须加上 script 到内联元素列表,在v1.6.9的第255行附近

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

    最后,你必须避免消毒来翻译像这样的字符 ( { 变成十六进制实体。寻找 function encodeEntities(value) {

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

    现在 <b>Hello</b> World, <script>alert("xss")</script> 将被接受并 alert("xss")