MVC Web API: URL 参数值中的点
MVC Web API: dot in URL parameter value
我已经实现了搜索功能来查找以(部分)代码作为搜索条件的数据,其中包括 . (点)在值中,因此应该可以将其包含在搜索条件中。
考虑 url:
myhost/api/search/88.
开箱即用,没有做任何额外的事情,这将导致 404 错误。然而,毫不奇怪,如果我删除点,url 工作正常。
我在 Whosebug 上找到了 this 作为可能的答案:
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />
</system.web>
问题
这确实有效,但我不确定这是否是最佳解决方案。我的意思是,有一个宽松的 url 机制是好的,如果它在其他方面是无害的,但我不想让其他字符造成比我现在想要的点更多的损害。也许我只是为了这个修复打开了地狱之门...
我可以相信这个解决方案还是有更安全的选择?
如果传递给 URL 的值是用户可以输入的搜索词,我不会配置我的路由系统来处理这些值,因为它们是不可预测的。
您应该对字符串进行编码并通过查询字符串传递它,或者post它并将其绑定到 WebAPI 中的对象。
在打开地狱之门方面,我认为你应该考虑一下points raised in this question。如果您必须设置类似 relaxedUrlToFileSystemMapping
的设置,这似乎可以放松 ASP.NET MVC 的某些默认安全系统,我倾向于倾向于不依赖于更改的解决方案,例如这个。
我已经实现了搜索功能来查找以(部分)代码作为搜索条件的数据,其中包括 . (点)在值中,因此应该可以将其包含在搜索条件中。
考虑 url:
myhost/api/search/88.
开箱即用,没有做任何额外的事情,这将导致 404 错误。然而,毫不奇怪,如果我删除点,url 工作正常。
我在 Whosebug 上找到了 this 作为可能的答案:
<system.web>
<httpRuntime relaxedUrlToFileSystemMapping="true" />
</system.web>
问题
这确实有效,但我不确定这是否是最佳解决方案。我的意思是,有一个宽松的 url 机制是好的,如果它在其他方面是无害的,但我不想让其他字符造成比我现在想要的点更多的损害。也许我只是为了这个修复打开了地狱之门...
我可以相信这个解决方案还是有更安全的选择?
如果传递给 URL 的值是用户可以输入的搜索词,我不会配置我的路由系统来处理这些值,因为它们是不可预测的。
您应该对字符串进行编码并通过查询字符串传递它,或者post它并将其绑定到 WebAPI 中的对象。
在打开地狱之门方面,我认为你应该考虑一下points raised in this question。如果您必须设置类似 relaxedUrlToFileSystemMapping
的设置,这似乎可以放松 ASP.NET MVC 的某些默认安全系统,我倾向于倾向于不依赖于更改的解决方案,例如这个。