当前位置: 首页 > 知识库问答 >
问题:

如何在角度页面中设置CSRF令牌-OWASP CSRFGuard 3.0

柳仲卿
2023-03-14

>

我正在使用OWASP CSRFGuard 3.0保护这些Restful服务不受CSRF的影响。

当使用简单的超文本标记语言访问相同的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>

角度代码(我对角度代码非常陌生)

<!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请求时,$超文本传输协议服务从cookie(默认情况下为XSRF-TOKEN)读取令牌,并将其设置为HTTP标头(X-XSRF-TOKEN)。因为只有在您的域名上运行的JavaScript才能读取cookie,所以您的服务器可以确信XHR来自在您的域名上运行的JavaScript。不会为跨域请求设置标头。

为了利用这一点,您的服务器需要在第一个HTTP GET请求上设置一个名为XSRF-TOKEN的JavaScript可读会话cookie中的令牌。在随后的XHR请求中,服务器可以验证cookie是否匹配X-XSRF-TOKEN HTTP头,因此确保只有在您的域上运行的JavaScript才能发送请求。令牌对于每个用户必须是唯一的,并且服务器必须可以验证(以防止JavaScript创建自己的令牌)。我们建议令牌是您网站身份验证cookie的摘要,带有盐,以增加安全性。

可以使用配置时的$http pProvider.defaults、运行时的$http.defaults或每个请求配置对象的xsrfHeaderName和xsrfCookieName属性指定标头的名称。

共有1个答案

萧渝
2023-03-14

但是如果你仍然使用旧版本,你可以使用这个:

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

app.config(function($httpProvider) {
  $httpProvider.defaults.xsrfCookieName = 'XSRF-TOKEN';
  $httpProvider.defaults.xsrfHeaderName = 'X-XSRF-TOKEN';
});

app.controller ...etc
 类似资料:
  • 大家好,我很难为我的应用程序设置安全解决方案!!所以我有一个REST API后端,在http://localhost:51030使用Spring框架开发,对于前端,我有一个Angular 2应用程序(最新版本A.K.A.Angular 4),运行速度为http://localhost:4200.我在后端设置了CORS配置,如下所示: 使用此配置只能正常工作,我可以执行从角应用到回弹的请求并获得响应

  • 问题内容: 如何在指令中设置插值?我可以从以下代码中读取正确的值,但无法设置它。 js: HTML: 我的控制器范围内的值在哪里? 问题答案: 如果要在范围上设置值,但不知道属性名称(提前),则可以使用以下语法: 如果属性中的字符串包含点(例如),则将无法使用;您可以用来做作业: 如果使用隔离范围,则可以使用批注: 您可以在此Angular /jQuery颜色选择器JSFiddle示例中看到一个示

  • 如果HTTP POST返回一个HTTP 403禁止,但对HTTP GET有效,那么问题很可能与CSRF有关。提供CSRF令牌或禁用CSRF保护(不推荐)。 那么,a怎么能做到这一点呢?

  • 问题内容: 我有一个使用elasticsearch-jetty项目的嵌入式Elasticsearch,并且我需要设置为比默认值更好地使用标记器。我想使用关键字标记器。 我一辈子都想不通如何通过配置文件来做到这一点。谁能指出我通过配置文件执行此操作的方法? 顺便说一句,是否可以通过对索引执行POST来在启动和运行时调整索引?我真的很想了解如何使用它,谢谢。 编辑/更新:我在将curl -XPUT或-

  • 我读过关于CSRF和不可预测的同步令牌模式是如何用来防止它的。我不太明白它是如何工作的。 让我们以这个场景为例: 用户使用以下表单登录到站点: 服务器还将令牌存储在会话中。发送请求时,它将表单数据中的令牌与会话中的令牌进行比较。 当黑客可以编写JavaScript代码时,如何防止CSRF: 发送GET请求到站点 接收包含请求表单的html文本。 在html文本中搜索CSRF令牌。 使用该令牌发出恶

  • 我们基于Angular的webapp与运行在不同域和上下文路径上的企业门户集成。我使用基于Spring Security的CSRF令牌来验证传入的请求。该应用程序在本地运行得非常好,但当我将其与门户集成时,所有post调用都失败了403,因为Angular无法读取XSRF令牌并将请求头中的X-XSRF-Token设置为API调用。经过调查,我发现门户和我们的应用程序的上下文路径不同,因此sprin