2015-11-05 2 views
0

Я использую ng-repeat для сообщений в чате:Как защитить Angular JS от атак XSS?

ng-bind-html="message.message + getAttachmentTemplate(message.attachment)" 

Как я могу вырезать специальные символы, как JS, HTML и безопасный от XSS Атак? Но мне нужно, чтобы отобразить HTML внутри getAttachmentTemplate

ответ

0

Вам нужно включить angular-sanitize.js, вы можете загрузить модуль ngSanitize

angular.module('app', ['ngSanitize']);

Вы можете использовать $sanitize службу, чтобы дезинфицировать свои HTML фрагменты, видите пример ниже:

angular.module('expressionsEscaping', ['ngSanitize']) 
 
    .controller('ExpressionsEscapingCtrl', function($scope, $sanitize) { 
 
    $scope.msg = 'Hello, <b>World</b>!'; 
 
    $scope.safeMsg = $sanitize($scope.msg); 
 
    });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<html> 
 

 
<head> 
 
    <meta charset="utf-8"> 
 
    <script src="http://code.angularjs.org/1.0.2/angular.js"></script> 
 
    <script src="http://code.angularjs.org/1.0.2/angular-sanitize.js"></script> 
 
    <script src="app.js"></script> 
 
</head> 
 

 
<body ng-app="expressionsEscaping" ng-controller="ExpressionsEscapingCtrl"> 
 
    <div class="container"> 
 
    <h2>Angular $sanitize demo</h2> 
 

 
    <p ng-bind="msg"></p> 
 
    <p ng-bind-html-unsafe="msg"></p> 
 
    <p ng-bind-html="msg"></p> 
 
    <p ng-bind-html-unsafe="safeMsg"></p> 
 

 
    <div>Provided by <a onclick="window.open('stackoverflow.com')">Stack Overflow</a> 
 
    </div> 
 
    </div> 
 
</body> 
 

 
</html>

+0

Нравится это: 'ng-bind-html =" message.message + getAttachmentTemplate ($ sanitize (message.attachment)) "' – Jaco

+0

Я получаю пустое сообщение, когда я использую '$ sanitize (message.message)' – Mustafa

+0

Извините вызов '$ sanitize' должен выполняться в контроллере – Jaco

Смежные вопросы