【问题标题】:Redirecting from http to https on SecureConnection is unable to pass values in POST request. How can I preserve them?在 SecureConnection 上从 http 重定向到 https 无法在 POST 请求中传递值。我怎样才能保存它们?
【发布时间】:2016-04-09 11:12:27
【问题描述】:

在我的项目中,我有一个 .ashx 页面,它接受来自外部的 POST 请求,并使用以下代码收集一个字符串变量:

string infoPost = httpRequest["infoPost"].ToString();

此代码在我的本地或 IIS 服务器上完美运行。

当我将它发布到我无法控制它的 IIS 服务器时,问题就开始了。不知何故,对象变空了,我得到“对象引用未设置为对象的实例”。这段代码出错了。

我做了一些研究,发现 SecureConnection 设置导致了问题。 IIS 服务器将所有“http”请求转换为“https”,但在执行此操作时会丢失 infoPost 变量。我通过直接用“https”调用这个页面来测试这个想法,这次代码运行良好,我抓住了发布的字符串。

但我不想要硬编码的工作。我试图通过使用以下代码了解网站是否设置为安全连接:

 string strSecure = "http://";
 if (HttpContext.Current.Request.IsSecureConnection)
     strSecure = "https://";

同样,这段代码在我的本地运行良好,但在我提到的 IIS 上不起作用。

抱歉,解释太长了,我的问题很简单:

  • 当 IIS 以某种方式将 http 请求重定向到 https 时,它无法在 POST 中传递参数。这是真的吗?我该如何预防?
  • 我想了解网站是否在 SecureConnection 上发布,但似乎“HttpContext.Current.Request.IsSecureConnection”代码在 IIS 上不起作用。我的假设正确吗?有没有其他方法可以理解和决定我应该使用哪个标签(http 或 https)?

【问题讨论】:

    标签: c# asp.net iis https http-post


    【解决方案1】:

    您不希望 POST 值从 http 重定向到 https,这将是一个安全漏洞。此功能的目的是迫使您面对应用程序中以明文形式发布值的任何内容,因为它们在重定向发生之前就被暴露了。

    【讨论】:

    • 感谢您的有用评论。我唯一的选择是从代码中了解连接是 http 还是 https。
    猜你喜欢
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 2021-07-27
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-08
    相关资源
    最近更新 更多