我正在学习ASP.NET Core MVC,正在阅读的书包括以下代码示例:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginModel loginModel)
{
// More stuff goes here.
}
您可以看到作者在action方法上包含[ValidateAntiForgeryToken]
属性。就我的研究而言,包括该属性似乎没有任何危害,但我也不确定是否有好处。
根据我对[ValidateAntiForgeryToken]的工作原理的了解,看来它在这里所实现的一切都可以防止恶意网站登录我……不确定我对尝试这样做的人是否有害。
很明显,我缺少了一些东西,所以我的问题是,在这种特定情况下,[ValidateAntiForgeryToken]的用途到底是什么?
谢谢。
答案 0 :(得分:0)
请考虑在银行内部申请。作为受害者,您拥有严格审核的事务处理应用程序的访问权限和凭据。您的同事,攻击者没有凭据,但设法以某种方式知道您的用户名和密码。没有登录csrf,他可以使用您的凭据登录自己,但他发出的请求的源(例如源IP)将与他相关联,并且您可以合理地拒绝他执行的任何操作。使用登录csrf,他可以使您访问他的恶意网站(如果您是从内部客户端访问的,则也可以是外部网站),并且他可以使用csrf从您自己的凭据中使用您的凭据登录pc,没有对他的审核跟踪,然后利用该应用程序中的任何其他csrf。
所以您是对的,登录csrf通常只是一个很小的组成部分,其用途之一可能是将内容隐藏在审核日志中,或者让位给其他csrf。
您也很正确,在许多情况下风险较低,例如,在许多漏洞赏金计划中,登录csrf均被排除在外。
还请注意,尽管登录csrf过去已被积极利用。互联网服务提供商通常会向其客户提供路由器,以在本地进行设置。同轴电缆,光纤,无论进入路由器(或调制解调器)的任何设备,它都为家庭网络提供以太网。用户可以设置一些设置,例如dhcp选项,名称服务器,端口转发。过去,许多此类路由器具有默认的本地IP地址(如192.168.1.1)和默认的用户名/密码(如admin / admin)。似乎可以,因为只能从内部网络访问配置网站。同样,许多这样的路由器(实际上,仍然)容易受到登录csrf的攻击。但是,攻击者可以建立一个外部网站,当该网站被访问时,将admin / admin发布到192.168.1.1/login,然后在另一个帖子中更改名称服务器,例如,这样有助于中间人进行攻击。外部攻击者无法执行此操作,因为他无法访问配置ui,但是使用csrf可以与内部网络的访问者一起使用。在这种情况下,登录csrf也是很有用的,但同样,这是一种边缘情况,但是另一种情况。