【问题标题】:what is the use of anti-forgery token salt?防伪令牌盐有什么用?
【发布时间】:2010-11-27 00:42:15
【问题描述】:

在 ASP.NET MVC 1.0 中,有一个处理跨站请求伪造安全问题的新特性:

 <%= Html.AntiForgeryToken() %>
[ValidateAntiForgeryToken]
public ViewResult SubmitUpdate()
{
    // ... etc
}

我发现每次呈现新表单时,以 html 表单生成的令牌都会不断变化。

我想知道这些令牌是如何生成的?并且当使用某些软件扫描这个站点时,它会报告另一个安全问题:会话已修复。为什么?既然token一直在变,怎么会出现这个问题呢?

还有另外一个功能,就是antiForgeryToken的“salt”,但是我真的知道这是做什么用的,即使我们不使用“salt”来生成token,token也会改变所有的时间,为什么要有这样的功能?

【问题讨论】:

    标签: asp.net-mvc security csrf session-fixation


    【解决方案1】:

    你问了一些不相关的问题:

    1. 我不知道为什么您的安全软件报告“会话已修复”。尝试阅读报告随附的文档
    2. 防伪令牌:

    这用于(大概)验证每个请求是否有效。所以考虑有人试图提供指向页面?x=1的链接,如果令牌也没有通过,请求将被拒绝。此外,它(可能)防止重复发布相同的项目。如果您单击“发布”两次,令牌可能会更改(每个请求),并且这种情况将通过以下方式检测到:

    Session["nextToken"] = token;
    WriteToken(token);
    
    ...
    
    if( !Request["nextToken"] == Session["nextToken"] ){
        ...
    }
    
    // note: order in code is slightly different, you must take the token
    // before regenerating it, obviously
    

    我认为这个术语(它保护的攻击)现在被称为“CSRF”(跨站点请求伪造)。

    【讨论】:

    • 但是为什么有人说token和SessionID有关呢?
    • MemoryLeak:我不知道,我没有专门使用 ASP.NET MVC,我一般回答的是请求令牌的目的。希望有人可以为您解决这个问题。
    • salt 用于生成令牌(使其随机且不可预测)。
    • 但即使我没有使用令牌,它也是随机的。那是我的问题
    • MemoryLeak:我想我会让别人回答;显然,在我不知道的事情上尝试帮助你对我来说是不好的:P
    【解决方案2】:

    这里有很多关于 AntiForgeryToken 的信息:http://blog.codeville.net/2008/09/01/prevent-cross-site-request-forgery-csrf-using-aspnet-mvcs-antiforgerytoken-helper/

    这是为了防止跨站请求伪造 (CSRF)。单击“保存”并在服务器上执行一些操作是非常标准的行为,即保存用户的详细信息。你怎么知道提交表单的用户是他们声称的用户?在大多数情况下,您会使用一些基于 cookie 或 windows 的身份验证。

    如果攻击者引诱您访问在一个隐藏的 IFRAME 中提交完全相同表单的网站,该怎么办?您的 cookie 会完整提交,服务器不会将请求视为与合法请求有任何不同。 (正如 gmail 发现的那样:http://www.gnucitizen.org/blog/google-gmail-e-mail-hijack-technique/

    防伪令牌通过在每次生成页面时创建一个额外的 cookie 令牌来防止这种形式的攻击。令牌在表单和 cookie 中,如果表单和 cookie 不匹配,我们就会受到 CSRF 攻击(因为攻击者无法使用上述攻击读取防伪令牌)。

    从上面的文章来看,盐有什么作用:

    Salt 只是一个任意字符串。不同的盐值意味着将生成不同的防伪令牌。这意味着即使攻击者设法以某种方式获取了有效令牌,他们也无法在应用程序的其他需要不同盐值的部分重用它。

    更新:令牌是如何生成的?下载source,并查看 AntiForgeryDataSerializer、AntiForgeryData 类。

    【讨论】:

    • 其实这些我都知道,你看到我的问题了吗?我刚刚从博客来。
    • 哪个问题是“会话已修复”,还是关于“盐”的问题? “会话固定”我不熟悉,你用什么来扫描网站?
    • 谢谢,russau,但我只是不同意博客文章,然后我在这里问一个问题....
    • 我已经用源链接更新了我的答案。我快速阅读了它,但无法立即弄清楚他们是如何创建令牌的。
    • 我不认为 cookie 令牌是在每次页面加载时生成的,而是为每个新用户会话生成的。
    猜你喜欢
    • 1970-01-01
    • 2015-01-11
    • 1970-01-01
    • 2019-03-05
    • 2018-01-16
    • 2013-11-27
    • 2015-05-11
    相关资源
    最近更新 更多