私は投票システムを実行しています。セッションキーは、ブラウザのユーザーエージェント文字列のハッシュを使用して部分的に生成されます。以下のページトレースに示されているように、奇妙なuseragent文字列の変更が原因で、一部のユーザーでエラーが発生しています。
ユーザーエージェントは、各ページの読み込みの最初に、PHPの次のマナーで検出されています。
function useragent()
{
static $user_agent = null;
if($user_agent === null)
{
$user_agent = getenv('HTTP_USER_AGENT');
if(empty($user_agent) === true)
{
$user_agent = $_SERVER['HTTP_USER_AGENT'];
}
}
return $user_agent;
}
以下のようなページアクショントレース。
[2012-09-27 13:20:50] => Array
(
[uri] => /start
[ua] => Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Sky Broadband; DS_desktopsmiley; GTB7.4; chromeframe/21.0.1180.89; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; playbrytetoolbar_playbryte; AskTB5.6; 789905664603; lib/6.02324)
)
[2012-09-27 13:20:50] => Array
(
[uri] => /nominees
[ua] => Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Sky Broadband; DS_desktopsmiley; GTB7.4; chromeframe/21.0.1180.89; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; playbrytetoolbar_playbryte; AskTB5.6; 789905664603; lib/6.02324)
)
[2012-09-27 13:21:10] => Array
(
[uri] => /nominees-save
[post] => Array
(
[category] => talent_show
[talent_show] => 5
)
[ua] => Mozilla/5.0 (Windows NT 6.0; chromeframe/21.0.1180.89) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
)
[2012-09-27 13:21:10] => Array
(
[uri] => /vote-error
[ua] => Mozilla/5.0 (Windows NT 6.0; chromeframe/21.0.1180.89) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.89 Safari/537.1
)
[2012-09-27 13:21:16] => Array
(
[uri] => /vote-start
[ua] => Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.0; Trident/4.0; Sky Broadband; DS_desktopsmiley; GTB7.4; chromeframe/21.0.1180.89; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30618; playbrytetoolbar_playbryte; AskTB5.6; 789905664603; lib/6.02324)
)
私が気づくことが3つあります。1)この人は大量のツールバーをインストールしています。2)Chromeframeがインストールされています。3)MSIEは通常のページに存在しますが、POSTリクエストと後続のリクエストには存在しません。
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
HTMLに追加され、ヘッダーが返されます。chromeframeはここで責任者ですか?もしそうなら、なぜchromeframeがこのようなPOSTリクエストヘッダーをハイジャックするのでしょうか?それがクロームフレームでない場合、その理由について何かアイデアはありますか?