加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

rest – 使用Angular前端和Drupal 7后端处理CSRF / XSRF令牌

发布时间:2020-12-17 17:19:37 所属栏目:安全 来源:网络整理
导读:我正在为Drupal 7网站构建一个新的AngularJS前端.这是使用服务模块进行基于会话的身份验证,使用CORS跨两个域.我能够使用Drupal进行身份验证,检索用户对象和会话数据,然后从服务模块获取CSRF令牌.我遇到的问题是在标题中设置所有这些,以便后续请求被验证.我理
我正在为Drupal 7网站构建一个新的AngularJS前端.这是使用服务模块进行基于会话的身份验证,使用CORS跨两个域.我能够使用Drupal进行身份验证,检索用户对象和会话数据,然后从服务模块获取CSRF令牌.我遇到的问题是在标题中设置所有这些,以便后续请求被验证.我理解整体概念,但对AngularJS和新的CSRF攻击都是新手.

从我收集的关于AngularJS和RubyOnRails的这个设置的阅读中,平台之间可能存在关于令牌的命名和处理方式的不一致.关于如何在标题中设置此标记似乎也有很多建议.但是,我很难找到一个如何使这些平台使用相同语言的可靠示例.

我在app.js中使用$httpProvider做的唯一事情是:

delete $httpProvider.defaults.headers.common['X-Requested-With'];

登录控制器,在controller.js中:

.controller('LoginCtrl',['$scope','$http','$cookies','SessionService',function($scope,$http,$cookies,SessionService) {
    $scope.login = function(user) {
        //set login url and variables
        var url = 'http://mywebsite.com/service/default/user/login.json';
        var postDataString = 'name=' + encodeURIComponent(user.username) + '&pass=' + encodeURIComponent(user.password);

        $http({
            method: 'POST',url: url,data : postDataString,headers: {'Content-Type': 'application/x-www-form-urlencoded'}
        }).success(function (data,status,headers,config) {
            var sessId = data.sessid;
            var sessName = data.session_name;
            $cookies[sessName] = sessId;

            var xsrfUrl = 'http://mywebsite.com/services/session/token';
            $http({
                method: 'GET',url: xsrfUrl
            }).success(function (data,config) {
                $cookies["XSRF-TOKEN"] = data;
                SessionService.setUserAuthenticated(true);
            }).error(function (data,config) {
                console.log('error loading xsrf/csrf');
            });
        }).error(function (data,config) {
            if(data) {
                console.log(data);
                var msgText = data.join("n");
                alert(msgText);
            } else {
                alert('Unable to login');
            }
        });
      };

解决方法

解决方案与如何设置cookie然后通过后续请求有关.尝试手动设置它们并不顺利,但解决方案比我预期的要简单.每个$http调用都需要设置选项:

withCredentials: true

我做的另一个改变是使用术语CSRF而不是XSRF,以与Drupal保持一致.我没有使用任何内置的AngularJS CSRF功能.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读