我已经使用过Spring MVC来建立我的RESTful服务: http://localhost:8088/SpringRestCSRF/rest/rest/greeting如何设置CSRF令牌角页 - OWASP CSRFGuard 3.0
我使用OWASP CSRFGuard 3.0保护这些RESTful服务从CSRF。
当使用一个简单的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性质或每个请求的配置 对象来指定。