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

AntiForgeryToken是如何工作的
EN

Stack Overflow用户
提问于 2011-01-31 15:43:47
回答 2查看 16.1K关注 0票数 26

我正试图保护自己免受CSRF的伤害,并拥有两个scenarious:

当我启用AntiForgeryToken

  • I从我的“恶意”Javascript (运行在另一个站点上)尝试先获取页面、解析它并提取RequestVerificationToken,然后再做一个帖子时,
  1. 在另一个站点上做文章时失败了。这也失败了,但我不清楚为什么?

有谁能解释一下原因吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-31 15:57:34

出于安全原因,您不能使用AJAX从另一个域检索内容。

因此,其他站点无法获得您的令牌。

票数 7
EN

Stack Overflow用户

发布于 2014-01-23 04:55:14

下面是关于CSRF的一个很好的教程:

http://youtu.be/vrjgD0azkCw

这是一般的要点:你登录到你的银行的网站。你的银行在你的机器上放一块饼干,这样它就可以验证你的身份。每次你向.提出要求。从) yourbank.com加载页面,浏览器将cookie发送到web服务器,web服务器上的代码检查cookie以确保您已通过身份验证。太棒了。

然而,当cookie尚未过期时,您检查邮件并打开来自尼日利亚王子的电子邮件,告诉您单击链接。你点击它(谁能抵抗),而不是带你到王子描述的页面,链接带你到这个URL:

http://yourbank.com/transfer.aspx?amt=1000000&from=myAccount&to=princeAccount

因为你已经在你的银行被认证了(通过cookie),它认为你实际上是在要求转账,所以它就这么做了。

这显然是一个人为的例子,但它明白了这一点。更现实的是,该链接可能提交一个请求,以更改您的电子邮件地址的论坛网站,你属于什么,以便他们可以访问它。

现在,回答你的具体问题:

与此作斗争的一种方法(由Rubyand.NET和其他人使用)是包含一个防伪造令牌。基本上,当您请求一个页面时,服务器包含一个带有加密值的隐藏字段。当您提交表单时,网站会查看cookie以确保您已通过身份验证,但它也会查看浏览器发送的加密值,并确保其有效。加密的令牌实际上是您的帐户绑定的会话id。因此,服务器看到cookie,将您标识为用户123,然后检查加密的表单字段令牌,解密该值,并确保未加密的值与您的会话或用户id或其他内容匹配。如果它这样做了,它就知道继续下去。

给你发送链接的尼日利亚王子不会知道你的会话id是什么,即使他知道了,他也无法用网站使用的相同的密钥和算法加密。

然后你就有了。一次挫败尼日利亚王子一次一个反伪造的标记。

(这里不反对尼日利亚或尼日利亚人。)我肯定他们是可爱的人。只是他们的王子有时表现得有点差。)

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

https://stackoverflow.com/questions/4852768

复制
相关文章

相似问题

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