Asp.Net Core 中的 [FromForm] 和 [FromBody] 有什么区别

SUA*_*PHI 13 asp.net-core

Asp.Net Core 中的 [FromForm] 和 [FromBody] 有什么区别。我将使用其中之一作为 post 方法。如果我使用 FromForm,是否会出现安全问题?

Wea*_*n X 18

FromBody (ContentType: application/json):

{ "user" : "conejo", "password" : "panda" }
Run Code Online (Sandbox Code Playgroud)

FromForm (ContentType: application/x-www-url-formencoded):

user=conejo&password=panda
Run Code Online (Sandbox Code Playgroud)

考虑到要使用FromBody发送多个字段,您必须将它们包装在一个对象中。就其本身而言,FromForm 的安全性并不比FromBody差。漏洞主要来自未使用HTTPS


Buz*_*zzz 15

如果你查看微软文档

  • [FromQuery] - 从查询字符串获取值。
  • [FromRoute] - 从路线数据获取值。
  • [FromForm] - 从发布的表单字段获取值。
  • [FromBody] - 从请求正文获取值。
  • [FromHeader] - 从 HTTP 标头获取值。

微软文档


Xue*_*hen 10

FromForm属性用于来自内容类型发送的提交表单的传入数据,application/x-www-url-formencodedFromBody它将以默认方式解析模型,在大多数情况下由内容类型application/json从请求正文中发送。

对于安全问题,您可以使用ValidateAntiForgeryTokenAttribute for post 方法,该方法指定应用此属性的类或方法验证防伪令牌。如果防伪令牌不可用,或者令牌无效,则验证将失败并且不会执行操作方法。

MVC 中的防伪令牌是一种防止跨站点请求伪造 (CSRF) 攻击的方法。无需赘述,当用户访问不受信任的站点并输入一些信息,然后将这些信息发回用户已通过身份验证的站点时,就会发生 CSRF 攻击。

您可以参考以下链接,了解 AntiForgeryToken() 的实际工作原理:

http://blog.at-dot.net/archive/2014/05/13/mvc-what-is-html-dot-antiforgerytoken-and-how-does-it-actually-work/#targetText=The%20anti %2Dforgery%20token%20found,%20user%20has%20already%20authenticated

  • 关于在典型的 REST 服务接口上使用其中一种与另一种的良好实践有何建议? (2认同)