剥离自定义HTTP标头字段

时间:2011-03-17 17:58:45

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

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

但是,当我们的Apache服务器从SSO代理接收HTTP请求时,尽管存在cookie,但所有自定义HTTP似乎都已被剥离。我已经检测了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标头还有其他原因吗?或者可能还有其他事情发生了?

感谢您的帮助!

马特

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

我终于明白了这一点,而且非常模糊......

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

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

(供参考,请参阅SiteMinder手册的一个版本:http://www.scribd.com/doc/48749285/h002921e)。

答案 2 :(得分:1)

我最近遇到了一个问题,我无法将任何自定义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/