отправка формы с одного HTTPS-сайта на другой HTTPS-сайт, вызывающая предупреждение системы безопасности

Мне нужно опубликовать строку с сайта .NET на классическом сайте ASP, который размещен на одном сервере (разные виртуальные каталоги).

https://example.com/DOTNETSite/Sender.aspx

to

https://example.com/ClassicASP/SomeFolder/Target.asp

Страница Target.asp имеет 3 способа обработки входящих данных:

  1. Форма сообщения
  2. Строка запроса
  3. Заголовки

Я не могу передать свои данные в строке запроса. так что этот вариант отпадает. Я пробую метод публикации формы, создавая форму на стороне сервера и выплевывая код javascript для выполнения form.submit(). Но это приводит к тому, что Internet Explorer выдает пользователю предупреждение системы безопасности. Мы хотим избежать этого. Пожалуйста, дайте нам знать, как лучше всего выйти из этой ситуации. Благодаря тонну.


person wortex    schedule 16.10.2010    source источник
comment
У вас где-нибудь есть смешанный контент? Как ведут себя другие браузеры? Например, Firefox, в свойствах предупреждения страницы HTTP которого сохранены значения true: security.warn_entering_secure, security.warn_leaving_secure: вы можете установить их, набрав about:config в адресной строке.   -  person Bruno    schedule 17.10.2010


Ответы (1)


Прямо сейчас вы делаете:

ваш сервер ----> ваш клиент/браузер ----> их сервер

Вместо этого вы должны использовать:

ваш сервер ----> ваш клиент/браузер ----> ваш сервер ----> их сервер

То есть (если это было недостаточно ясно), заставьте его отправлять форму на ваш собственный сервер. Когда ваш сервер получает форму, он должен отправить ее на целевой сервер.

На базовом уровне это работает. Однако у вас могут возникнуть проблемы, если пользователь должен войти в систему на втором сервере и т. д.

Я попытаюсь проиллюстрировать пример на PHP:

Файл: form.html

<form action="send.php" method="post">
    ....
</form>

Файл: send.php

<?php
  $url='https://example.com/ClassicASP/SomeFolder/Target.asp';
  // create new cur connection
  $ch=curl_init();
  // tell curl target url
  curl_setopt($ch, CURLOPT_URL, $url);
  // tell curl we will be sending via POST
  curl_setopt($ch, CURLOPT_POST, true);
  // tell it not to validate ssl cert
  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
  // tell it where to get POST variables from
  curl_setopt($ch, CURLOPT_POSTFIELDS, $_POST); 
  // make the connection
  curl_exec($ch);
  // close connection
  curl_close($ch);
?>
person Christian    schedule 16.10.2010
comment
Спасибо за ответ. пожалуйста, можно поподробнее об этом? как я понял, делать публикацию формы через javascript - неправильный вариант. правильный? просто к сведению, мне нужно это в asp.net С# - person wortex; 17.10.2010
comment
В некоторых случаях (например, IdP для SP в SSO через Shibboleth) ваш сервер ----› ваш клиент/браузер ----› ваш сервер ----› их сервер нежелателен, а ваш сервер -- --› ваш клиент/браузер ----› их сервер, в противном случае второй сервер не сможет аутентифицировать браузер напрямую, а первый сервер может фактически быть посредником. Публикация на другой HTTPS обычно работает без предупреждения. - person Bruno; 17.10.2010
comment
@ Бруно, поэтому я сказал, что посредник может создать другие проблемы, однако, как я уже сказал, на базовом уровне это работает. @wortex, я имею в виду, что вместо того, чтобы заставлять пользователя отправлять запрос на целевой сервер, заставьте свой собственный сервер отправлять целевой запрос - конечно, предварительно получив необходимые данные из пользовательской формы. - person Christian; 17.10.2010
comment
Можете ли вы, ребята, предоставить пример кода для этого? Я пробовал это: Response.Write(‹body onload=document.forms[0].submit();›); Response.Write(‹имя формы=\Form\ method=post action=\example.com/ClassicASP /SomeFolder/Target.asp\›); Response.Write(string.Format(‹тип ввода=скрытое имя=\postData\ значение=\{0}\›, данные)); Ответ.Написать(‹/форма›); Ответ.Запись(‹/тело›); это работает с локального хоста на цель, но когда я развертываю продукт с помощью https, он выдает мне всплывающее окно безопасности. - person wortex; 22.10.2010
comment
@wortex - Нет, вы должны сами настроить HTTP(S)-соединение на своем сервере! В PHP мы используем CURL или Sockets, посмотрите, что эквивалентно в ASP. - person Christian; 24.10.2010