gpt4 book ai didi

c# - 如何在使用相对 URL 时更改 http/https 协议(protocol)

转载 作者:可可西里 更新时间:2023-11-01 09:15:53 25 4
gpt4 key购买 nike

协议(protocol)相关 URL 不是我要找的。我正在寻找一种绝对指定协议(protocol)(http 与 https)同时保持 url 相对主机名的方法。

给定一个相对 URL,例如“/SearchForStuff”,我希望能够指定不同的协议(protocol)“https 与 http”等,而无需指定主机名/域名。

我们的网站有一个标题部分 View ,我们将其显示在我们网站每个页面的顶部。网站上的一些页面是 http,一些是 https。标题包含一个文本框和用于全站搜索的按钮。站点搜索结果页面始终使用 http 提供,因此我们希望表单操作指向相对路径“/find”。但是,我们希望相同的 header 在我们的许多内部测试服务器(10.10.10.123 等)以及面向公众的服务器(“www.publicfacingserver.com”)上工作,理想情况下不更改 header 部分 View 的内容。所以基本上我正在寻找的是一种为搜索操作指定协议(protocol)同时保持服务器/主机名相对的方法。

目前,为确保用户无法从安全页面链接到站点搜索结果的安全页面,我们对用于站点搜索的操作的绝对 URL 进行硬编码,并附上协议(protocol)和主机名,例如“http://www.publicsite.com/find”。问题在于,在测试服务器 上单击该操作会将您重定向回我们的面向公众 网站。因此,为了进行测试,我们对主机文件进行了手动编辑,以使测试服务器的 IP 地址等于我们面向公众的站点名称。作为开发人员,这给我们自己带来了一些认知负担,并且还需要我们访问我们希望测试我们站点的任何非编码人员的计算机,以在测试之前配置他们的主机文件,并在测试之后取消配置更改其主机文件。

下面的代码是我想出的最佳解决方案。有谁知道更好的方法?如果我的解决方案足够了,它会产生任何安全漏洞吗?我不明白这是怎么回事,因为如果恶意用户伪造对我们面向公众的 IP 地址 X 的请求,但主机 header 中的主机名与该 IP 地址不匹配,这只会导致不稳定的 URL被提供回同一用户。换句话说,我看不出任何人如何通过在另一个站点的留言板或任何类似的东西中发布 URL 来使用它来创建 XSRF 漏洞:

public static string CurrentHostName(this UrlHelper helper, HttpProtocol protocol)
{
var result = string.Empty;

if (protocol == HttpProtocol.Secure) result += "https://";
if (protocol == HttpProtocol.UnSecure) result += "http://";
if (protocol == HttpProtocol.Current) result += HttpContext.Current.Request.Url.Scheme;

result += HttpContext.Current.Request.Url.Host;

if (HttpContext.Current.Request.Url.Port != 80) result += ":" + HttpContext.Current.Request.Url.Port.ToString();

return result;
}

HttpProtocol 是我自己创建的枚举。

谢谢!

最佳答案

我认为您要求的 URL 格式是 host 相对的,而不是 protocol 相对的。我不认为使用任何标准的 url 格式是可能的。例如,http:/path/filename 对此不起作用。

关于c# - 如何在使用相对 URL 时更改 http/https 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6629696/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com