首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AntiForgeryToken是如何工作的?

AntiForgeryToken是如何工作的?
EN

Stack Overflow用户
提问于 2012-07-30 13:00:33
回答 1查看 6.8K关注 0票数 4

我正在将安全性应用于我的.net 3.5 mvc2 web应用程序。我的网站不包含任何用户身份验证,由.js文件中的许多ajax调用组成。

在我的.aspx文件中我写了

代码语言:javascript
复制
<%= Html.AntiForgeryToken() %>   

在我的.js文件函数中我写了

代码语言:javascript
复制
$(document).ready(function() {

var token = $('input[name=__RequestVerificationToken]').val();

    $.ajax({
    url: "/Home/getCurrentLanguage/" + Math.random(),
        cache: false,
        type: "POST",
        async: false,
        data: {"__RequestVerificationToken":token},
        success: function(data) {
            if (data == "mr") {
                alert("its Marathi");
            } else {
                alert("its English huh !!!");
            }
            return false;
        },
        error: function(data) {
            alert("some Error" + data);
        }
    });

});

在我的控制器里我写道

代码语言:javascript
复制
    [AcceptVerbs(HttpVerbs.Post), ValidateAntiForgeryToken]
    public JsonResult getCurrentLanguage(string id)
    {
        return new JsonResult
        {
            Data = "mr"
        };

    }

这对我来说很好,但我有两个问题

Q1。这是正确的做法吗?如果我看到页面源代码,我发现了以下代码

代码语言:javascript
复制
<input name="__RequestVerificationToken" type="hidden" value="WFd+q5Mz0K4RHP7zrz+gsloXpr8ju8taxPJmrLO7kbPVYST9zzJZenNHBZqgamPE1KESEj5R0PbNA2c64o83Ao8w8z5JzwCo3zJKOKEQQHg8qSzClLdbkSIkAbfCF5R6BnT8gA==" /> 

但是,当我创建外部html文件并复制__RequestVerificationToken的值并传入ajax调用时,我将得到这个错误。

A所需的防伪令牌未提供或无效。然后是

Q2。运行时如何知道此页面提供复制的__RequestVerificationToken?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-31 16:11:18

这个"AntiForgeryToken“已经就位,以防止跨站点请求伪造攻击。如果应用程序存在跨站点脚本漏洞,则攻击者可能会破坏此系统。

此令牌防止CSRF攻击,因为由于有了同源政策,攻击者可以发送请求,但他无法读取页面上的令牌以使请求成功(除非他有xss漏洞)。

对于Q2,每个用户的值必须是唯一的,因此每次页面加载时都会更新。如果它只是一个静态值,那么它在停止CSRF方面毫无用处,因为攻击者将知道相同的静态值。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11722137

复制
相关文章

相似问题

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