URL-адреса, относящиеся к протоколу - это не , что я ищу.Я ищу способ абсолютного указания протокола (http против https) при сохранении относительного имени хоста URL.
Учитывая относительный URL-адрес, такой как "/ SearchForStuff", я хочу иметь возможность указатьдругой протокол "https vs. http" и т. д. без указания имени хоста / домена.
Наш сайт имеет частичное представление заголовка, которое мы отображаем в верхней части каждой страницы нашего сайта.Некоторые страницы на сайте http, а некоторые https.Заголовок содержит текстовое поле и кнопку для поиска по всему сайту.Страница результатов поиска по сайту всегда предоставляется с использованием http, поэтому мы хотим, чтобы действие формы указывало на относительный путь "/ find".Однако мы хотим, чтобы один и тот же заголовок работал на наших многочисленных внутренних тестовых серверах (10.10.10.123 и т. Д.), А также на нашем общедоступном сервере ("www.publicfacingserver.com"), в идеале без изменения содержимого частичного представления заголовка.По сути, я ищу способ указать протокол для действия поиска, сохраняя относительное имя сервера / хоста.
В настоящее время, чтобы гарантировать, что пользователь не сможет связать защищенную страницу с защищенной страницей результатов поиска по сайту, мы жестко запрограммировали абсолютный URL-адрес действия, используемого для поиска по сайту, вместе спротокол и имя хоста, например "http://www.publicsite.com/find".. Проблема в том, что нажатие этого действия на тестовом сервере перенаправляет вас на наш общедоступный сайт . Поэтому для тестированиямы вносим ручные изменения в наш файл hosts, чтобы IP-адрес тестового сервера совпадал с именем нашего общедоступного сайта, что создает небольшую когнитивную нагрузку для нас как разработчиков, а также требует от нас посещения компьютера любого не кодирующего человека, которого мыВы хотите протестировать наш сайт, чтобы настроить файл хостов перед тестированием и после тестирования, чтобы де-сконфигурировать изменения в файле хостов.
Приведенный ниже код - лучшее решение, которое я нашел. Кто-нибудь знаетлучшего способа? Если мое решение адекватно, создает ли оно какие-либо уязвимости в безопасности? Я не вижу, как оно могло бы, siЕсли бы злонамеренный пользователь подделал запрос на наш общедоступный IP-адрес X, но с именем хоста в заголовке хоста, которое не совпадало с этим IP-адресом, это привело бы только к тому, что неправильные URL-адреса были возвращены тому же пользователю.Другими словами, я не понимаю, как кто-то может использовать это для создания эксплойта XSRF, разместив URL на доске объявлений на другом сайте или что-то подобное:
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 - это перечисление, которое ясоздал себя.
Спасибо!