angularjs清理只删除JS

时间:2014-04-18 14:18:41

标签: javascript angularjs sanitization

我打算允许用户输入iframe,自定义内联样式以及其他内容。 但我想删除任何JS。

通过使用$ sanitize,我似乎删除了太多。

1 个答案:

答案 0 :(得分:2)

如果您只想删除脚本标记,则应该执行以下操作:

angular.module('app', ['ngSanitize'])
  .directive('testDir', function() {
    return {
      restrict: 'A',
      controller: function($scope, $sce) {
        $scope.sanitizeIt = function() {
          var replacer = /<script>.*(<\/?script>?)?/gi;
          var stripped = $scope.html.replace(replacer, '');
          $scope.sanitizedHtml = $sce.trustAsHtml(stripped);
        };

        $scope.$watch('html', $scope.sanitizeIt);
      }
    };
  });

正则表达式将清除所有脚本标记,$sce告诉应用程序您可以信任被剥离为HTML的字符串。

在您的应用程序中,您可以编写如下内容:

<body ng-app="app">
  <div test-dir>
    <textarea ng-model="html"></textarea>
    <div ng-bind-html="sanitizedHtml"></div>
  </div>
</body>

当您持久保存到数据库时,请确保保存已清理的HTML字符串而不是html。

以下是$sce的更多文档:

https://docs.angularjs.org/api/ng/service/ $ SCE

它基本上是$sanitize在幕后使用的内容。注意:除了Chrome之外,我还没有在浏览器中测试过这个正则表达式,因此您可能需要进行一些自己的调整才能使其适合您的需求。但是,这个想法是一样的。