Как изменить протокол http / https при использовании относительного URL - PullRequest
10 голосов
/ 08 июля 2011

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 - это перечисление, которое ясоздал себя.

Спасибо!

Ответы [ 2 ]

1 голос
/ 11 июля 2011

Я думаю, что вы запрашиваете формат URL, который хост относительно, а не протокол относительно. Я не думаю, что это возможно, используя любое стандартное форматирование URL. Например, http: / path / filename не работает для этого.

0 голосов
/ 19 октября 2018

Предупреждение: http: / path / filename интерпретируется по-разному в разных браузерах.

Firefox интерпретирует путь как путь, но другие браузеры интерпретируют «путь» как имя сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...