我有一个关于Mvc antiforgerytoken的问题
在mvc razor页面中,我们可以在表单中放置代码:@Html.AntiForgeryToken()
,它会生成一个令牌,这个令牌将填入隐藏的输入字段,如:
<input name="__RequestVerificationToken" type="hidden"
value="6I2CsrmAhiDlHewQ4q4khXAENgaa66kDiGwHgaN5DV0f4W2_c2nyVA-q2OCingcgKLPNhSSeyuS_WaTmAGzpo3F5gUq9Wx89iXH1ujq6ZwGG5rO8v_F-4hYj5gEVZ1-E-DpxkcO7zIjMUKVH1bjPMo7Ot3UJHLl5r9isfCLyiOA1">
问题: 我可以轻松创建一个下载此mvc razor页面的请求,以便从&#34; __ RequestVerificationToken&#34;中获取令牌。字段,然后发布不良数据攻击指定服务器。 这是否意味着防伪令牌功能也不安全???
答案 0 :(得分:1)
AntiForgeryToken()旨在确保跨站点请求伪造攻击(CSRFs)无法成功,并且令牌执行此操作:如果对表单目标的请求来自其他站点,它没有正确的令牌,因此请求会立即被拒绝。如果其他网站必须首先与您的网站联系以获取令牌,那么它可能也会开始通过您的网站。
答案 1 :(得分:1)
这很安全。将防伪标记放置到表单中还会使用相同的标记创建名为 __ RequestVerificationToken 的cookie。此cookie也经过验证以验证请求。由于攻击者无法将cookie添加到应用程序域,因此无法通过此验证。
史蒂夫桑德森有一个很好的blog post,详细解释了它。