【发布时间】:2017-04-12 19:02:51
【问题描述】:
对于我过去从事的一个项目,我们将一个 URL 存储在应用数据库的一个字段中,以便当用户不得不离开、关闭系统或其他任何事情时,他们可以恢复工作通过打开受影响的记录来处理某事。 此 URL 指的是在我们公开的 Web API 中为相关应用程序定义的控制器方法,并提供了打开受影响记录所需的参数。
有一个问题,我们注意到 - 很少 - 正在存储的端点是指 POST 端点,而不是 GET 端点。当这个条件被触发时,我们会得到如下异常:
The parameters dictionary contains a null entry for parameter 'MyParameter' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult SomeEndpoint(Int32, Int32)' in 'MyApplication'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters
我们知道要解决问题要做什么:我们要扫描 URL 并确定动词。如果动词是 POST,我们希望重定向到特定的 URL,以防止我们的应用程序陷入这种容易出错的状态。我们希望在服务器端进行这种重定向,不仅出于安全原因,而且因为它根本不是客户端代码问题。
我在 Google 上对此主题进行了粗略的搜索,但没有找到任何有关对给定 URL 的动词进行逆向工程的文章。
问题:有没有什么方法可以在给定一些 URL 的情况下确定在 C# 中引用的 HTTP 动词是什么?
如果有没有——这是我所期望的,很可能是出于安全原因——是否有任何关于避免此类问题的技术建议?在发布这个问题之前,我已经对受影响的应用程序进行了代码审计,并且无法轻松地重现导致这个问题的条件(在我们的数据库中存储一个 POST URL),并且没有发现应该导致的逻辑一个 POST URL 被保存到我们的数据库中。
【问题讨论】:
-
您几乎必须使用动词调用 url 以查看它是否有效。虽然名字没有规则,但有约定,所以你大概可以根据名字直觉一些人用的是什么动词。
标签: c# rest asp.net-web-api httpverbs