【问题标题】:posting a form from one HTTPS to another HTTPS site causing security alert将表单从一个 HTTPS 发布到另一个 HTTPS 站点导致安全警报
【发布时间】:2010-10-16 19:36:54
【问题描述】:

我需要将一个字符串从 .NET 站点发布到托管在同一台服务器(不同的虚拟目录)上的经典 ASP 站点。

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

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

Target.asp 页面有 3 种方式来处理传入的数据:

  1. 表单发布
  2. 查询字符串
  3. 标题

我无法在查询字符串中传递我的数据。所以这个选项就出来了。我正在通过在服务器端构建一个表单并吐出 javascript 代码来执行 form.submit() 来尝试 Form post 方法。但这会导致 Internet Explorer 向用户发出安全警报。我们想避免这种情况。请让我们知道克服这种情况的最佳方法是什么。非常感谢。

【问题讨论】:

  • 您在某处有任何混合内容吗?其他浏览器的行为如何?例如 Firefox,HTTP 页面警告属性保持为truesecurity.warn_entering_securesecurity.warn_leaving_secure:您可以通过在地址栏中输入about:config 来设置它们。

标签: asp.net post asp-classic webforms https


【解决方案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);
?>

【讨论】:

  • 感谢您的回复。拜托,你能更具体一点吗?据我了解,通过 javascript 发布表单是一个错误的选择。正确的?仅供参考,我在 asp.net c# 中需要这个
  • 在某些情况下(例如通过 Shibboleth 将 IdP 到 SSO 中的 SP),“您的服务器 ----> 您的客户端/浏览器 ----> 您的服务器 ----> 他们的服务器" 是不可取的,而 "your server ----> your client/browser ----> their server" 是,否则第二台服务器可能无法直接对浏览器进行身份验证,而第一台服务器可能实际上是一个男人在中间。发布到另一个 HTTPS 通常不会发出警告。
  • @Bruno,这就是为什么我说中间人可能会引入其他问题,但是,正如我所说,在基本层面上它是有效的。 @wortex,我的意思是,不是让用户将请求发送到目标服务器,而是让您自己的服务器发送目标请求 - 当然,在首先从用户表单接收到所需的数据之后。
  • 你们可以为此提供一些示例代码吗?我试过这个: Response.Write(""); Response.Write("
    example.com/ClassicASP/SomeFolder/Target.asp\">"); Response.Write(string.Format("", "data")); Response.Write("
    "); Response.Write("");这适用于本地主机到目标,但是当我使用 https 部署到 prod 时,它会抛出安全弹出窗口。
  • @wortex - 不,您必须让您的服务器自己进行 HTTP(S) 连接!在 PHP 中,我们使用 CURL 或 Sockets,看看 ASP 中的等价物。
猜你喜欢
  • 1970-01-01
  • 2014-11-22
  • 2019-08-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-21
  • 2020-10-17
相关资源
最近更新 更多