Загружать контент по незащищенному каналу

У меня есть сайт ASP.NET MVC, который настроен только для HTTPS.

На одной из страниц этого сайта должен отображаться контент с удаленного веб-сайта без поддержки SSL.

Я не могу загрузить контент через ajax, так как это будет означать, что незащищенный контент смешивается с моим безопасным контентом, и браузеры укажут, что сайт имеет смешанный контент.

Поэтому вместо этого я подумал, что могу загрузить контент на стороне сервера с помощью класса HttpClient с помощью веб-API, а затем доставить его клиенту через AJAX:

public async Task<string> GetNewsAsync()
{
    var newsFeed = WebConfig.GetAppSetting("NewsRssAddress");
    var feedContent = "";

    try
    {
        using (var client = new HttpClient())
        using (var response = await client.GetAsync(newsFeed))
        using (var content = response.Content)
        {                                 
            feedContent = await content.ReadAsStringAsync();
        }
    }
    catch(Exception ex)
    {
        Mailer.SendError(ex);
        throw;
    }
    return feedContent;
}

Однако это все равно выдает WebException:

System.Net.WebException: The underlying connection was closed: Could not establish trust relationship for the SSL/TLS secure channel.

НЕ ДЕЛАЙТЕ ЭТОГО!
Напечатав это, я начинаю думать, что то, что я пытаюсь сделать, просто плохая практика и неправильно, и есть нет возможности загрузить незащищенный контент на безопасный сайт, это действительно имеет смысл, я имею в виду, что этот контент может быть любым!

Как оказалось, сайт, с которого я пытаюсь загрузиться, является другим веб-сайтом моей компании, просто на другом сайте нет SSL.

Насколько я могу судить, это мои варианты:

  1. Не загружайте контент. период.
  2. Попробуйте получить на другом сайте SSL-сертификат.
  3. Разберитесь с предупреждением о смешанном содержании (я не собираюсь этого делать!)

Мысли?


person philreed    schedule 02.10.2014    source источник


Ответы (2)


Я думаю, что вы немного смешиваете понятия. Реализация SSL на вашем сайте предназначена для обеспечения уверенности посетителей в том, что вы являетесь тем, за кого себя выдаете, и что общение, которое они ведут с вам, было зашифровано при передаче. Эта реализация SSL не гарантирует целостность содержимого сайта; это может быть полностью вредоносным, потому что у вас есть уязвимость SQL-инъекции, и вы оставили анонимный FTP открытым на своем сайте для загрузки. Он полон вредоносных программ и козлиных картинок, но SSL по-прежнему делает именно то, для чего он предназначен - безопасно обслуживает его по соединению!

То, как контент заполняется на странице, не связан с тем, как вы обслуживаете его через HTTPS. Вы определенно можете отправлять HTTP-запросы на стороне сервера из ресурса, запрашиваемого через HTTPS. Попробуйте здесь: https://asafaweb.com.

должны ли вы — это другой вопрос; вы должны предположить, что запрос внешнего ресурса может быть перехвачен (или сайт может быть скомпрометирован независимо от транспортного уровня), и вы все равно захотите применить соответствующий белый список и проверку содержимого перед его повторным отображением.

person Troy Hunt    schedule 03.10.2014
comment
Спасибо за ответ Трой. Я собираюсь сделать запрос неправильно, используя HttpClient? Почему я получаю WebException? Справедливое замечание о проверке контента, мы рассмотрим это сегодня, но я ожидаю, что эта функция является скорее «желанием», чем «необходимостью», поэтому может сойти с рук сообщение заинтересованным сторонам, что они не могут ее получить. - person philreed; 03.10.2014
comment
Я не вижу ничего, что вы там делаете неправильно, но я бы попробовал проксировать запрос через Fiddler и просто быть уверенным в том, что именно вы пытаетесь загрузить, и если, независимо от вашего кода, запрос может на самом деле исполниться. Я использую HttpWebRequest в ASafaWeb без проблем, но HttpClient тоже должен подойти. Для проверки работоспособности загрузите страницу, которая отправляет запрос по HTTP, и посмотрите, что произойдет — держу пари, она все еще не работает! - person Troy Hunt; 04.10.2014