публикуване на формуляр от един 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 c# - person wortex; 17.10.2010
comment
В някои случаи (като IdP към SP в SSO чрез Shibboleth), вашият сървър ----› вашият клиент/браузър ----› вашият сървър ----› техният сървър не е желателен и вашият сървър -- --› вашият клиент/браузър ----› техният сървър е, в противен случай вторият сървър може да не е в състояние да удостовери браузъра директно и първият сървър може ефективно да бъде човек по средата. Публикуването към друг HTTPS обикновено работи без предупреждение. - person Bruno; 17.10.2010
comment
@Bruno, затова казах, че да бъдеш човек по средата може да създаде други проблеми, но, както казах, на основно ниво работи. @wortex, това, което казвам е, че вместо да накарате потребителя да изпрати заявката до целевия сървър, накарайте вашия собствен сървър да изпрати целевата заявка - след като първо получите необходимите данни от формуляра на потребителя, разбира се. - person Christian; 17.10.2010
comment
можете ли да предоставите примерен код за това? Опитах това: Response.Write(‹body onload=document.forms[0].submit();›); Response.Write(‹form name=\Form\ method=post action=\example.com/ClassicASP /SomeFolder/Target.asp\›); Response.Write(string.Format(‹input type=hidden name=\postData\ value=\{0}\›, data)); Response.Write(‹/form›); Response.Write(‹/body›); това работи от localhost към целта, но когато разположа към prod с https, ми извежда изскачащия прозорец за сигурност. - person wortex; 22.10.2010
comment
@wortex - Не, трябва сам да накараш сървъра си да осъществява HTTP(S) връзката! В PHP използваме CURL или Sockets, вижте какъв е еквивалентът в ASP. - person Christian; 24.10.2010