• Asp.Net MVC和webapi CSRF防攻击ajax使用方法


    一、MVC提交

    视图

    @using (Html.BeginForm())
        {
            @Html.AntiForgeryToken()
            <p>
                <strong><em>*</em>姓名:</strong><input type="text" id="name" name="name" />
            </p>
            <p>
                <strong><em>*</em>年龄:</strong><input type="text" id="age" name="age" />
            </p>
            <p>
                <input type="submit" value="提交" />
            </p>
        }

    控制器

            [HttpPost]
            [ValidateAntiForgeryToken]
            public ActionResult PostAdd(FormCollection FromValue)
            {
            //
            }        

    二、ajax+mvc提交

    js

    $("form").submit(function () {
                    //var token = $("input[name='__RequestVerificationToken']").val();
                    var token = $('@Html.AntiForgeryToken()').val();
                    var postData = { id: 123, name: "张三", __RequestVerificationToken: token };
                    $.ajax({
                        url: '/api/Test/PostData/666',
                        type: "post",
                        data: postData,
                        success: function (res) {
                            console.log(res)
                        },
                        error: function () {
                            console.log("错误")
                        }
                    })
                    return false;
                })

    控制台

    [ValidateAntiForgeryToken]
            public string PostData(string id,string name)
            {
                string res = "id==" + id + ",name==" + name;
                return res;
            }

    三、ajax+webapi

    js

    $("form").submit(function () {
                    var postData = { id: 123, name: "李四"};
                    $.ajax({
                        url: '/api/Test/PostData/666',
                        headers: {'RequestVerificationToken': '@ApiValidateAntiForgeryToken.GenerateAntiForgeryTokenForHeader()'},
                        type: "post",
                        contentType: 'application/json',
                        data: JSON.stringify(postData),
                        success: function (res) {
                            console.log(res)
                        },
                        error: function () {
                            console.log("错误")
                        }
                    })
                    return false;
                })

    webapi

    [HttpPost]
            [ApiValidateAntiForgeryToken]
            public string PostData(dynamic obj)
            {
                string res = "id===" + obj.id + ",name===" + obj.name+",ref="+Request.Headers.Referrer.Host;
                return res;
            }
    //ApiValidateAntiForgeryToken是自定义过滤器

    //成功一定有方法,失败一定有原因。
  • 相关阅读:
    RHEL双网卡绑定
    图解机房收费系统报表制作的全过程
    linux内存管理机制
    hdu4432 Sum of divisors(数论)
    树和而叉查找树的实现
    49. 面向对象的LotusScript(十五)之Log4Dom下
    HDU 4009 不定根最小树形图
    模拟+二分 poj-1019-Number Sequence
    SQL Server 事务日志传输
    百度开放云java+tomcat部署web项目-小皇帝詹姆斯
  • 原文地址:https://www.cnblogs.com/webapi/p/15384192.html
Copyright © 2020-2023  润新知