【发布时间】:2021-05-21 09:19:00
【问题描述】:
我有一个看起来像这样的代码
public async Task DeleteUser(string userId)
{
await httpClient.DeleteAsync($"/v1/api/users/{userId}");
}
问题是恶意条目可能会删除预期用户之外的其他内容。
例如,如果一个用户有很多博客帖子,则恶意条目可能是userId="/v1/api/users/12394/posts/4",这将删除博客帖子而不是删除该用户。
现在,Uri 类似乎有 3 种不同的转义方法。 Uri.EscapeUriString、Uri.EscapeString 和 Uri.EscapeDataString。
但是,围绕这些及其差异的文档要么不存在,要么真的无法理解,需要阅读 3 RFCs 才能理解其目的。
我记得我什至在某个地方看到了其他方法(我认为是在一个名为 WebUtility 的类中),它们也在 URL 中转义了东西。
那么转义路径段的正确方法是什么?
编辑:
我忘了HttpUtility.UrlEncode。
【问题讨论】:
-
你有机会期待一个整数值而不是一个字符串吗?
-
这只是一个例子,在这种特定情况下是,但在其他情况下不是。
-
您可能需要考虑 regular expressions 来完成清理 URI 的繁重工作。您可能还想检查 URI 是否为 well formed 和 prevent escaping on the URI
-
是的,但是保留字符集是一样的。
标签: c# .net .net-core dotnet-httpclient