首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AngularJS网络Api AntiForgeryToken CSRF

AngularJS网络Api AntiForgeryToken CSRF
EN

Stack Overflow用户
提问于 2015-09-08 14:18:34
回答 3查看 23.6K关注 0票数 43

我有一个AngularJS单页应用程序(SPA),它由ASP.NET MVC应用程序托管。

后端是ASP.NET Web .

我想通过在ASP.NET MVC部件中生成一个AntiForgeryToken来保护它免受ASP.NET 攻击,然后将它传递给AngularJS,然后让Web 验证从后续E 116AngularJSE 217调用接收的AntiForgeryToken

“跨站点请求伪造(CSRF)是一种攻击,它迫使最终用户在当前通过身份验证的web应用程序上执行不必要的操作。CSRF攻击专门针对状态变化的请求,而不是窃取数据,因为攻击者无法看到对伪造请求的响应。借助一些社交工程的帮助(例如通过电子邮件或聊天发送链接),攻击者可能会欺骗web应用程序的用户执行攻击者选择的操作。如果受害者是正常用户,成功的CSRF攻击会迫使用户执行状态更改请求,如转移资金、更改电子邮件地址等。如果受害者是一个管理帐户,CSRF可能会危及整个web应用程序。“。

  • 开放Web应用程序安全项目(OWASP)
EN

Stack Overflow用户

发布于 2017-10-13 16:01:56

添加到ASP.NET MVC视图中

代码语言:javascript
复制
<Form ng-submit="SubmitForm(FormDataObject)">
        @Html.AntiForgeryToken()
        .....
        ...
        .
</Form>

然后在AngularJs控制器

代码语言:javascript
复制
angular.module('myApp', []).controller('myController', function ($scope, $http, $httpParamSerializerJQLike) {

        $scope.antiForgeryToken = angular.element('input[name="__RequestVerificationToken"]').attr('value');

        $scope.SubmitForm = function (formData) {
            var dataRequest = {
                __RequestVerificationToken: $scope.antiForgeryToken,
                formData: angular.toJson(formData)
            };

            $http.post("/url/...", $httpParamSerializerJQLike(dataRequest), { headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8' } }).then(function (response) {
                $scope.result = JSON.parse(response.data);
            });
        }
    });

为什么$httpParamSerializerJQLike(dataRequest)?因为如果没有这些,AngularJs将数据序列化为:

代码语言:javascript
复制
{__RequestVerificationToken: blablabla, formData: blablabla}

而Asp.NET MVC控制器抛出所需的防伪表单字段“__RequestVerificationToken”不存在错误。

但是,如果您使用$httpParamSerializerJQLike(dataRequest),将请求数据序列化为:

代码语言:javascript
复制
__RequestVerificationToken: blablabla
formData: blablabla

而Asp.NET MVC控制器可以在没有任何错误的情况下识别令牌。

票数 -1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32460196

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档