-4

我使用AntiXss編碼器上的服務器端用於XSS atacks因此所有響應包括HTML UNESCAPE字符,如「& LT:腳本& GT:警報(1); & LT:/腳本& GT:」 (替換爲';'爲':')angularjs消毒上NG-模型

關於綁定我使用清理與ng-bind-html這是沒有問題的。 有更新模式的其他控制輸入。當用戶需要更新文本時,他們點擊更新圖標,然後我顯示textarea並隱藏綁定標籤ng-if。 textarea有ng-model attr。我不能逃避textarea上的html字符,如ng-bind-html這裏是摘錄幫助我得到creazy ..

in fiddle;編輯模式下的textarea必須顯示「<腳本>警報(1); < /腳本>」沒有警報操作和數據將被髮送到服務器上必須顯示相同的太...

here is the fiddle

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

 
app.controller('MyCtrl', function($scope, $sce, $sanitize) { 
 
    $scope.post1 = "&lt;script&gt;alert(1);&lt;/script&gt;"; 
 
    //$scope.post2 = $sce.parseAsHtml("<h1>alert(1)</h1>"); 
 
    $scope.logs = ["log created"]; 
 
    $scope.log = function(val){ 
 
    \t $scope.logs.push(val); 
 
    } 
 
});
.label { 
 
    text-decoration:underline; 
 
    color:red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.4.8/angular-sanitize.min.js"></script> 
 

 
<div ng-app="myApp"> 
 
    <div ng-controller="MyCtrl"> 
 
     <div class="label">Edit mode :</div> 
 
     <textarea ng-model="post1" style="width:100%;" rows="5"></textarea><br /> 
 
     <div class="label">Binding mode :</div> 
 
     <div ng-bind-html="post1"></div><br /> 
 
     <div class="label">Data will be send to the server :</div> 
 
     <div>{{post1}}</div><br /> 
 
     <div class="label">Logs (if needed) :</div> 
 
     <div ng-repeat="d in logs"> 
 
     <p>{{($index+1) + ". " + d}}</p> 
 
     </div> 
 
</div> 
 
</div>

回答

0

你有$的sanitize服務,但它不看你使用它等。這:

$scope.post1 = "&lt;script&gt;alert(1);&lt;/script&gt;";

大概應該是這樣的:

$scope.post1 = $sanitize("&lt;script&gt;alert(1);&lt;/script&gt;";)

此外,$ sanitize方法是不是核心角包的一部分。如果你不這樣做已經你需要包括角sanitize.js並添加ngSanitize模塊的依賴關係: var app = angular.module('myApp', ["ngSanitize"]);

+1

我已經使用消毒並用消毒$什麼也沒有發生一樣:( –

+0

我也可以確認使用$ sanitize模塊不適用於ng模型 – DrewT