【问题标题】:Custom HTTP header fields stripped自定义 HTTP 标头字段被剥离
【发布时间】:2011-03-17 17:58:44
【问题描述】:

我的公司销售作为设备部署的基于 LAMP(其中 P = Perl,而不是 PHP)的应用程序。一位客户试图将他们的 SiteMinder SSO 与我们的应用程序集成,这样我们的设备就位于运行 SiteMinder Apache 插件的代理后面,该插件充当网守。对于我们的应用程序通过 SSO 对用户进行身份验证,我们希望看到包含 SSO cookie(在本例中为 SMSESSION)和包含用户名的自定义 HTTP 标头变量的 HTTP 请求。

但是,当我们的 Apache 服务器从 SSO 代理接收 HTTP 请求时,所有自定义 HTTP 似乎都已被剥离,尽管 cookie 存在。我已经使用以下代码检测了 Perl 代码以将标头写入日志文件:

my $q = new CGI;
...
my %headers = map { $_ => $q->http($_) } $q->http();
my $headerDump = "Got the following headers:\n";
for my $header ( keys %headers ) {
    $headerDump = $headerDump . "$header: $headers{$header}\n";
}
kLogApacheError("info", $headerDump);

...这是我得到的输出(为了保密,稍作编辑):

[Wed Mar 16 23:47:31 UTC 2011] [info] Got the following headers:
        HTTP_COOKIE: s_vi=[CS]v1|26AE2FFD851D091F-4000012E400035C5[CE]; s_nr=1297899843493; [snip]
        HTTP_ACCEPT_LANGUAGE: en-US,en;q=0.8
        HTTP_ACCEPT_ENCODING: gzip,deflate,sdch
        HTTP_CONNECTION: keep-alive
        HTTP_ACCEPT: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
        HTTP_ACCEPT_CHARSET: ISO-8859-1,utf-8;q=0.7,*;q=0.3
        HTTP_USER_AGENT: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.13 (KHTML, like Gecko) Chrome/9.0.597.107 Safari/534.13
        HTTP_HOST: [redacted].com

IOW,我期望的客户 HTTP 标头丢失了。当我们将流量从代理重定向到不同的 Apache 服务器(即不是我们的设备)时,所有 20 多个自定义标头都会按预期显示。这强烈表明是我们的 Apache 服务器在剥离标头。

我们从未在其他部署中遇到过这样的问题,即使使用这种特殊的 SSO 解决方案也是如此。我意识到这与本网站上的另一个问题(Server removes custom HTTP header fields)类似,但那里的建议(例如运行 mod_security 引起的问题)不适用。

我们的服务器可能会剥离 HTTP 标头是否还有其他原因?还是可能有其他事情发生?

感谢您的帮助!

马特

【问题讨论】:

  • 看来你在正确的轨道上:你的 Apache 吃掉了那些自定义的头文件。在您的问题中,我没有看到任何提示,您的 Apache 是如何配置的。你不能只比较这两个 Apache confs 吗?
  • 感谢您的反馈。我们的客户是一家大型银行,因此很遗憾我们无法轻松访问他们的环境。

标签: perl apache http-headers cgi single-sign-on


【解决方案1】:

您是否嗅探过代理和 Apache 实例之间的原始 HTTP 流量?如果此处缺少必要的标头,则问题出在代理端。

【讨论】:

    【解决方案2】:

    我终于想通了,而且很晦涩......

    使用 HttpFox,看起来流量确实被重定向到设备,而不是被转发。在重定向的情况下,cookie 是持久的,但 HTTP 请求标头不是。但是,SSO 代理规则都是“转发”的,所以我们完全不知道为什么会出现重定向。

    我们知道如果用户尚未通过身份验证,我们的应用程序的逻辑将重定向到 /signin/,但我们预计这仍会通过代理进行路由。但是,我们没有意识到 SiteMinder SSO 选项,enableredirectrewrite,默认情况下会处理“由目标服务器发起的任何重定向 [通过将它们传递回请求用户”。一旦我们将此标志设置为“yes”,并将 redirectrewritablehostnames 设置为“all”,一切都会像魔术一样运行。

    (作为参考,请参阅此处的 SiteMinder 手册版本:http://www.scribd.com/doc/48749285/h002921e)。

    【讨论】:

      【解决方案3】:

      我最近遇到了一个问题,我无法将任何自定义 HTTP 标头传递给我的 PHP 脚本。 运行带有 FCGID 的 PHP 7 的 Apache 2 似乎不允许和删除或触发所有自定义 HTTP 标头。

      这是我的解决方法: http://kiteplans.info/2017/06/13/solved-apache-2-php-7-fcgid-not-allowing-removing-stripping-custom-http-headers/

      【讨论】:

        猜你喜欢
        • 2010-09-26
        • 1970-01-01
        • 2023-04-04
        • 2020-03-11
        • 2015-03-28
        • 2012-11-07
        • 1970-01-01
        • 1970-01-01
        • 2011-10-29
        相关资源
        最近更新 更多