【发布时间】:2020-06-17 15:42:00
【问题描述】:
使用带有基本 URI 的 Uri 类似乎存在一个主要问题。出于某种原因,如果传入一个相对 URI 并且它似乎是一个完整的 URL,那么它是一个“功能”,Uri 类将忽略 baseUri 而只使用相对 Uri。这可能是一个安全漏洞,我想了解如何避免它,但仍然获得结合基本 URI 和相对 URI 以在 C# dotnetcore 中创建单个 URL 的功能。
在下面的示例中,您可以看到 http://badexample.com 的相对 uri 使 baseUri 不会出现在生成的 URI 中。这很危险。
using System;
public class Program
{
public static void Main()
{
var baseUri = new Uri("http://google.com");
var relativeUri = new Uri(baseUri, "search?q=stuff");
Console.WriteLine(relativeUri);
var badUri = new Uri(baseUri, "http://badexample.com");
Console.WriteLine(badUri);
}
}
输出:
http://google.com/search?q=stuff
http://badexample.com/
【问题讨论】:
-
您可以使用
IsBaseOf来确定一个是否是另一个的基础。这是一种解决方法,但似乎有助于避免安全问题 -
您期望的输出是什么?
http://google.com/http://badexample.com? -
@Magnetron 这将是可接受的输出(虽然可能是 url 编码)
-
那就看看我的答案是否适合你