ASP.NET MVC 不良做法:控制器操作不限于 POST - 误报?
ASP.NET MVC Bad Practices: Controller Action Not Restricted to POST - False Alarm?
我正在使用 Fortify on Demand 处理一些源代码,并获得了其中一些弹出窗口(C# 项目):
ASP.NET MVC 不良做法:控制器操作不限于 POST
Code Flagged: public JsonResult NamesList(GetNamesForGroupsRequest request)
上面提到的代码行是 [HttpGet],而不是 POST。
我认为这是误报,再次...
如果您不修改数据,我认为这可能是误报。 Fortify 对此的解释(我的重点)
ASP.NET MVC controller actions that modify data by writing, updating,
or deleting could benefit from being restricted to accept the POST
verb. This increases the difficulty of cross-site request forgery
because accidental clicking of links will not cause the action to
execute.
从你的方法签名来看,你似乎是根据请求返回数据而不是修改它,所以我认为在你的情况下,它可以被认为是误报。
与 PUT 或 DELETE 相比,POST 动词可以防止 CSRF 并没有什么神奇之处。
如果你有一个好的 CSRF 策略,使用的具体动词应该无关紧要(GET 除外。不要使用 GET 修改数据。)
通过邮件正文而不是 URL 传递数据可能有助于将敏感数据排除在日志和其他地方之外。 (假设您使用的是 TLS。)
我正在使用 Fortify on Demand 处理一些源代码,并获得了其中一些弹出窗口(C# 项目):
ASP.NET MVC 不良做法:控制器操作不限于 POST
Code Flagged: public JsonResult NamesList(GetNamesForGroupsRequest request)
上面提到的代码行是 [HttpGet],而不是 POST。
我认为这是误报,再次...
如果您不修改数据,我认为这可能是误报。 Fortify 对此的解释(我的重点)
ASP.NET MVC controller actions that modify data by writing, updating, or deleting could benefit from being restricted to accept the POST verb. This increases the difficulty of cross-site request forgery because accidental clicking of links will not cause the action to execute.
从你的方法签名来看,你似乎是根据请求返回数据而不是修改它,所以我认为在你的情况下,它可以被认为是误报。
与 PUT 或 DELETE 相比,POST 动词可以防止 CSRF 并没有什么神奇之处。 如果你有一个好的 CSRF 策略,使用的具体动词应该无关紧要(GET 除外。不要使用 GET 修改数据。)
通过邮件正文而不是 URL 传递数据可能有助于将敏感数据排除在日志和其他地方之外。 (假设您使用的是 TLS。)