AntiForgeryToken是否可以防止向服务器提交额外的表单字段

本文关键字:提交 字段 表单 服务器 是否 AntiForgeryToken | 更新日期: 2023-09-27 18:23:52

我是一个相对较新的开发人员,正在开发C#MVC应用程序,并根据不同的人应该能够看到的字段为他们提供不同的视图。也就是说,用户1可能看到(并且能够将数据输入)字段A、B和C,而用户2可能只看到字段A。

我目前的计划是将表单发布回我的控制器中的一个操作,但我试图弄清楚我是否需要防止用户1在收到表单时修改表单,在浏览器中添加字段B和C,然后将其发送回服务器,以在数据库中设置他不应该访问的值。

该地区的其他人告诉我,AntiForgeryToken应该可以抵御这种类型的攻击,但我的研究表明,它只可以抵御跨站点的伪造攻击,我不认为这属于这一类。我的问题是:AntiForgeryToken能防止这种情况吗?还是我需要继续"不信任用户发送给你的内容"的想法,并明确忽略用户无权使用的字段?

AntiForgeryToken是否可以防止向服务器提交额外的表单字段

你认为这是一个问题,这是绝对正确的。所有防伪令牌所做的就是确保表单是由您的应用程序生成的,而不是手工制作的。然而,这并不意味着它以后不能被篡改。

举个例子,假设您有两个用户,他们在您的应用程序中都有帐户:GoodUserNaughtyUser。他们都使用你的应用程序来请求一个特定的表格,这样他们就可以在网站上做一些事情(例如编辑拍卖)。他们之间的区别在于,GoodUser只对编辑拍卖感兴趣,但由于两个用户之间存在直接竞争,NaughtyUser想破坏GoodUser的拍卖。

为此,NaughyUser决定打开一个表格来编辑自己的一个拍卖。此时,他已经在表单中收到了一个有效的防伪令牌。因此,现在NaughtyUser修改了表单上的数据,其想法是有意编辑GoodUser的拍卖,并将其发布到服务器。防伪令牌本身绝对不会防止这种情况,因为令牌本身是通过合法来源生成的。

这是一种不同类型的攻击,您肯定应该在服务器端保护它。

它非常简单。为了保护我们的服务器不受非法请求的影响,我们允许提交仅由我们的服务器生成的表单。这意味着,一旦ASP.NET服务器执行操作方法并为客户端准备HTML,它就会使用加密令牌对表单进行签名。表单提交时,此服务器生成的令牌将与表单的数据一起发送,如果您使用validateandtiforgerytoken属性标记您的操作,则服务器将检查表单中的此唯一令牌。如果它存在并且在该服务器上生成了令牌,则将通过验证。