如何在禁用$ sceProvider的情况下利用Angular中的XSS

时间:2018-06-28 17:52:06

标签: javascript html angularjs security web

我正在尝试实施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>

被放入描述中,并发送到服务器以保存到数据库中,下次加载页面时,它以相同的方式打印,而不会显示警报。

1 个答案:

答案 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>