2012-09-27 3 views
3

나는 투표 시스템을 운영 중입니다. 세션 키는 부분적으로 브라우저 사용자 에이전트 문자열의 해시를 사용하여 생성됩니다. 아래에 페이지 추적으로 표시되는 이상한 사용자 에이전트 문자열 변경으로 인해 일부 사용자에게 오류가 발생했습니다.IE 사용자 에이전트 문자열이 양식 POST에서 크게 변경되는 이유는 무엇입니까?

각 페이지로드의 맨 처음에 PHP에서 다음 사용자가 useragent를 발견했습니다.

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) 
) 

내가 알아 차릴 세 가지가 있습니다. 1)이 사람은 툴바가 설치된 쓰레기가 있습니다. 2) Chrome 프레임이 설치되었습니다. 3) MSIE는 정상적인 페이지에는 있지만 POST 요청 및 후속 요청에는 없습니다.

<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> 

이 HTML에 추가되고 헤더가 반환됩니다. chromeframe이 책임있는 파티입니까? 그렇다면 왜 chromeframe이 POST 요청 헤더를 하이재킹합니까? 그 이유는 무엇입니까?

답변

1

내 생각에 ChromeFrame이 맞을 것입니다. 아마도 사용자 에이전트 문자열이 왜 증가했는지에 대한 수많은 이유가있을 수 있습니다. 활성화 된 경우 - -

  1. ChromeFrame받는 지식 또는 액세스 할 수 없습니다 : 여기 (이 모든 ChromeFrame 아마 그것이이 필요한 생각하는 경우에만에서 단계는 사실에 달려) 나는 추측 할 수있는 몇 가지 원래 브라우저 사용자 에이전트 문자열 및 그래서 그것은 자체 생성합니다.

  2. 서버 측 개발을 도울 수 있습니다.

  3. ChromeFrame은 완전히 다른 사용자 에이전트이므로 서버 측에 다르게보고해야한다고 쉽게 주장 할 수 있습니다.

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

는 기본적으로 사용자 에이전트 문자열을 신뢰할 수 없습니다 (특히 5.0 모질라 4.0에서 변경). 다른 방법을 찾아야합니다.

+0

크롬 프레임입니다. – buggedcom

+0

나는 그것이 내가 손에서 생각할 수있는 것이 아니라는 것을 인정해야한다. 앞으로 어떤 것이 든 사용자 에이전트에 의존하는 것을 피하는 또 하나의 이유입니다.) – Pebbl

+0

http://www.chromium.org/developers/how-tos/chrome-frame-getting-started/understanding-chrome-frame-user-agent – eis

1

중요한 것은 사용자 에이전트 문자열에 의존해서는 안됩니다. 그것은 종종 바뀔 수 있고 프록시와 같은 다른 시스템에 의해 변경 될 수있는 가치입니다.

세션 키는 한 번만 생성하고 쿠키를 통해 공유해야합니다. 따라서 단일 사용자의 사용자 에이전트에서 변경된 사항은 아무런 영향을 미치지 않아야합니다.