3

私は投票システムを実行しています。セッションキーは、ブラウザのユーザーエージェント文字列のハッシュを使用して部分的に生成されます。以下のページトレースに示されているように、奇妙な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リクエストヘッダーをハイジャックするのでしょうか?それがクロームフレームでない場合、その理由について何かアイデアはありますか?

4

2 に答える 2

1

重要なことについては、ユーザーエージェント文字列に依存しないでください。これは、頻繁に変更され、プロキシなどの他のシステムによって変更される可能性のある値です。

セッションキーは一度だけ生成し、Cookieを介して共有する必要があります。したがって、単一ユーザーのユーザーエージェントを変更しても、とにかく影響はありません。

于 2012-09-27T13:18:16.787 に答える
1

私の推測では間違いなくChromeFrameでしょう。ユーザーエージェント文字列がそれによって拡張されている理由には、おそらく多くの理由があります。ここに私が推測できるいくつかがあります(これらはすべて、ChromeFrameが必要であると考えた場合にのみ介入するという事実に依存しています)

  1. ChromeFrame(有効になっている場合)には、元のブラウザのユーザーエージェント文字列に対する知識やアクセス権がないため、独自の文字列が生成されます。

  2. サーバー側の開発を支援するためにそれを行うことができます。

  3. ChromeFrameはまったく異なるユーザーエージェントであるため、サーバー側へのレポートが異なる必要があると簡単に主張できます。(特にMozilla 4.0から5.0への変更)

http://www.chromium.org/developers/how-tos/chrome-frame-getting-started#TOC-Detecting-Google-Chrome-Frame-and-Prompting-to-Install

基本的に、ユーザーエージェント文字列は信頼できません。他の手段を見つける必要があります。

于 2012-09-27T13:22:48.203 に答える