Как предотвратить инъекцию / загрузку тега скрипта перед рендерингом html в angularjs?

0

var testApp = angular.module('testApp',['ngSanitize']);
testApp.controller('TestController',function($scope,$sce){
	$scope.htmlString = "<span>Test HTML</span><script>alert('Hello Script');</script>";
	$scope.toTrusted = function(htmlContent) {
		if(htmlContent && htmlContent != "") {
			return $sce.trustAsHtml(htmlContent);			
		}
		return "";
	};
});
<html ng-app="testApp">
<body ng-controller="TestController">
	<div ng-bind-html="toTrusted(htmlString)"></div>
	<script src="http://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script>
	<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.11/angular-sanitize.min.js"></script>
	<script type="text/javascript" src="resources/js/controllers/testController.js"></script>
</body>
</html>

Я использую ng-bind-html для строки рендеринга как html. Иногда я получаю скриптовый тег в строке html, и я не хочу вставлять/загружать тег script.So, что я должен сделать, чтобы предотвратить тег скрипта.

Я также искал решение этой проблемы, кто-то говорит, что просто удалите тег сценария из строки перед рендерингом html. Поэтому, пожалуйста, кто-нибудь подскажет мне. Каков лучший способ сделать это?

Я разрабатываю приложение для чата с помощью angularjs и firebase. И для передачи сообщений чата я использую директиву ng-bind-html. Что я заметил, что если пользователь отправляет скриптовый тег как часть сообщений чата, но при этом запускается сценарий. Так Я хочу ограничить запуск этого скрипта.

  • 0
    Хорошо, я в замешательстве. Тег скрипта находится в вашей строке. Почему ты не можешь просто взять это?
  • 0
    Вы должны очистить строку html, чтобы разрешить только ограниченное подмножество тегов.
Показать ещё 2 комментария
Теги:

1 ответ

0

Если вы используете $ sce.trustAsHtml, вам нужно использовать только ng-bind.

<div ng-bind="toTrusted(htmlString)"></div>

Попробуйте это и дайте мне знать.

  • 0
    Но Aditya мы не можем использовать директиву ng-bind, потому что директива ng-bind используется для замены текстового содержимого указанного HTML

Ещё вопросы

Сообщество Overcoder
Наверх
Меню