我正在尝试实施XSS易受攻击的应用程序,以便以后可以使用域驱动设计原则来改善安全性。前端是使用AngularJS实现的,为此我禁用了$ sceProvider。但是,到目前为止,我尝试过的任何XSS攻击示例都没有用。
HTML页面:
<div class="row" ng-init="loadArticles()">
<h1>Existing articles</h1>
<table id="tabela1" class="table table-striped table-hover">
<thead>
<tr>
<th>Book title: </th>
<th>Description: </th>
</tr>
</thead>
<tbody>
<tr ng-repeat="b in BOOKS track by $index" >
<td style="padding-right: 15px">{{b.title.value}}</td>
<td style="padding-right: 15px">{{b.description.value}}</td>
</tr>
</tbody>
</table>
</div>
</div>
ArticleController.js
$scope.loadArticles = function () {
console.log("loading articles");
var url = "/api/article/getAll";
$.ajax({
type: 'GET',
url : url,
contentType: 'application/json',
dataType: 'text',
success: function (data) {
$scope.BOOKS = JSON.parse(data);
$scope.$apply();
},
error : function(XMLHttpRequest, textStatus, errorThrown) {
//toaster poruka
alert('Could not load articles!');
}
});
};
例如,当
<script>alert();</script>
被放入描述中,并发送到服务器以保存到数据库中,下次加载页面时,它以相同的方式打印,而不会显示警报。
答案 0 :(得分:2)
您不会使用{{}}或ng-bind来获取它,而是可以使用ng-bind-html或类似的东西来获取它。
var app = angular.module('plunker', []);
angular.module('plunker').config(function ($sceProvider) {
$sceProvider.enabled(false);
});
app.controller('MainCtrl', function($scope) {
$scope.name = 'World';
$scope.x ='<img src="wrongUrl" onerror="alert(1)"/>';
});
<div ng-bind-html="x"></div>