2015-05-09 60 views
3
  1. 我已经使用过Spring MVC来建立我的RESTful服务: http://localhost:8088/SpringRestCSRF/rest/rest/greeting如何设置CSRF令牌角页 - OWASP CSRFGuard 3.0

  2. 我使用OWASP CSRFGuard 3.0保护这些RESTful服务从CSRF。

  3. 当使用一个简单的HTML访问同一个REST服务 - AJAX请求 - CSRF令牌是越来越设置和我得到的回应:

下面的代码工作正常。

<!DOCTYPE html> 
<html> 
<head> 
<title>REST Service with CSRF Protection</title> 
<script 
    src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script> 

<!-- First Get call OWASP CSRFGuard JS servlet which sets the token --> 
    <script src="http://localhost:8088/SpringRestCSRF/CsrfJavaScriptServlet"></script> 


<script type="text/javascript"> 
    $(document).ready(function() { 
     $.ajax({ 
      url : "http://localhost:8088/SpringRestCSRF/rest/rest/greeting", 
      type: 'POST', 

     }).then(function(data, status, jqxhr) { 
      $('.greeting-id').append(data); 
      console.log(data); 
     }); 
    }); 
</script> 
</head> 

<body> 
    <div> 
     <p class="greeting-id">The Response is is : </p> 
    </div> 

</body> 
</html> 
  • 当我采用了棱角分明想同样的事情,令牌不获取设置和我得到CSRF后卫错误。
  • 角码(我是很新的角度)

    <!DOCTYPE html> 
    <html lang="en"> 
    
    
    <head> 
    <script 
        src="http://ajax.googleapis.com/ajax/libs/angularjs/1.3.14/angular.min.js"></script> 
    
    <!-- Assumption - First Get call to OWASP CSRFGuard JS servlet which sets the token --> 
    
    <script src="http://localhost:8088/SpringRestCSRF/CsrfJavaScriptServlet"></script> 
    </head> 
    
    <body ng-app="myapp"> 
    
        <div ng-controller="MyController"> 
         <button ng-click="testPost(item, $event)">Send AJAX Request</button> 
         <br /> Data from server: {{myData.fromServer}} 
    
         <br /> Cookie Value {{$cookies}} 
        </div> 
    
        <script> 
         /*----------------*/ 
    
         var app = angular.module('myapp', []); 
    
         app 
           .controller(
             'MyController', 
             function($scope, $http) { 
              $scope.result = ""; 
    
              $scope.init = function() { 
               $http.defaults.xsrfHeaderName = 'X-CSRF-TOKEN'; 
               $http.defaults.xsrfCookieName = 'CSRF-TOKEN'; 
              }; 
    
              $scope.testPost = function() { 
               $http 
                 .post(
                   'http://localhost:8088/SpringRestCSRF/rest/rest/greeting') 
                 .success(function(result) { 
                  $scope.result = result; 
                  $scope.myData.fromServer = data; 
                 }); 
              }; 
             }); 
    
        </script> 
    
    </body> 
    
    </html> 
    

    有人建议我应该如何在角设置令牌。从角

    报价:

    在寻找一个解决这个问题,请阅读以下声明。

    跨站请求伪造(XSRF)保护XSRF是 的一种技术,未经授权的站点可以获取用户的私有数据。 Angular 提供了一种反制XSRF的机制。执行XHR请求时,$ http服务从cookie(默认为XSRF-TOKEN) 中读取一个令牌并将其设置为HTTP标头(X-XSRF-TOKEN)。由于只有在您的域上运行的JavaScript 才能读取该Cookie,因此您的服务器可以是 ,以确保XHR来自运行在您的域上的JavaScript。将不会为跨域请求设置 标头。

    要充分利用此优势,您的服务器需要在第一个HTTP请求中设置一个名为XSRF-TOKEN的JavaScript可读会话cookie中的令牌 。在随后的XHR请求中,服务器可以验证Cookie是否与X-XSRF-TOKEN HTTP标头匹配,因此请确保只有在您的域上运行的JavaScript可以发送请求 。 令牌对于每个用户必须是唯一的,并且必须可由 服务器验证(以防止JavaScript构建自己的令牌)。我们 建议该令牌是您的网站身份验证 Cookie的摘要,以提高安全性。

    标题的名称可以使用xsrfHeaderName和在 配置时,$ http.defaults在运行时任一$ httpProvider.defaults的 xsrfCookieName性质或每个请求的配置 对象来指定。

    回答

    0

    现在与angular2的东西已经改变..但如果你仍然使用旧版本,你可以使用这个:

    var app = angular.module('myapp', []); 
    
    app.config(function($httpProvider) { 
        $httpProvider.defaults.xsrfCookieName = 'XSRF-TOKEN'; 
        $httpProvider.defaults.xsrfHeaderName = 'X-XSRF-TOKEN'; 
    }); 
    
    app.controller ...etc