メールフォームプロCGI 3.2.0 SSL利用時について


たまたま mailform pro を使わせて頂く機会がありました。

https + BASIC認証 + 強制httpsリダイレクト という特殊な環境下で見つけたバグ?というか仕様です。
最初にBASIC認証をし内容登録してthanksページを表示しようとすると、BASIC認証が再表示します。

おや?と思ってプロトコルログを取ってみると、thanksページ表示時に http を経由しているようです。
firefoxやchromeだと問題無いのですが、IEではそのBASIC認証を厳密にチェックしているようで
一度 http に落ちた時にBASIC認証を求められるようでした。

ソースを見てみると、functions.cgi でこんな表記がありました。

if(index($ENV{'SERVER_PROTOCOL'},'HTTPS') > -1){
	$refreshurl = 'https://' . $ENV{'SERVER_NAME'} . $uri . $refreshurl;
}
else {
	$refreshurl = 'http://' . $ENV{'SERVER_NAME'} . $uri . $refreshurl;
}

多分、ここ間違ってると思います。
$ENV{‘SERVER_PROTOCOL’} で取れるものは、HTTP/1.1とかHTTP/1.0で HTTPS という文字列は取れないと思います。
取るなら、$ENV{‘SERVER_PORT’} で 443 を取るべきなんでしょうが、SSLも443だけとは限りません。
HTTP_REFERER で https という文字列を取ってもいいのですが、referer も100%取れる訳ではありません。
SSL_SECURE_RENEG の true を取るのがこの場合ベストなんですかねぇ…

if(index($ENV{'SSL_SECURE_RENEG'},'true') > -1){
	$refreshurl = 'https://' . $ENV{'SERVER_NAME'} . $uri . $refreshurl;
}
else {
	$refreshurl = 'http://' . $ENV{'SERVER_NAME'} . $uri . $refreshurl;
}

一応これで動作するようです。
とはいえ、自分はプログラマでは無いのでおかしな挙動をするかも知れません。
ご利用の際には自己責任にて宜しくお願い致します。
当方はトラブル・障害に対して一切関知致しません。

コメントを残す

メールアドレスが公開されることはありません。