MS의 작태

이 소스는 MSIE 이외의 브로우저나 MSIE 5.0 미만의 브로우저로 접속하는 경우 페이지를 전환하기 위해서 집어넣은 소스이다. 분명 이러한 작태는 아주 MS적인 작태이다. 세상의 브로우저는 MSIE 밖에 없다는 고질적인 작태다. 그러나 분명 FireFox를 골탕먹이기위해 삽입한 소스는 아니다. <사진: 최고의 귀요미, 사막여우>

불여우 사용자 골탕 먹이기

미운털이 박히놈은 뭔짓을 해도 밉다. 그래서인지 MS가 하는 짓은 다 밉다(그러면서 Windows XP를 쓰고 있는 나도 밉다). 그러나 글은 써야한다. 이 것이 진실이므로.

얼마전 올블로그의 알찬글로 마이크로소프트사의 불여우 사용자 골탕 먹이기라는 글이 올라왔다. 자세한 내용은 해당 블로그를 확인하면 알 수 있으므로 여기서는 간단히 설명하겠다.

MS 사이트중 한글화에 대한 의견을 구하는 사이트에 접속하면 MSIE는 정상적으로 접속이 되지만 FireFox로 접속하면 '페이지 없음'이라는 오류 메시지가 출력된다는 것이다(사실이다). 아울러 이러한 행위가 FireFox 사용자를 골탕먹이려고 하는 MS의 다분히 의도적 행위라는 것**이다.

MS의 행위는 다분히 의도적인 행위이다. 그러나 이 것은 FireFox 사용자를 골탕 먹이기위한 의도적인 행위가 아니라 그저 MS적인 행위라는 것이다. MS의 고질병은 '프로그램을 개발할 때 OS는 Windows, 브로우저는 MSIE만 존재하는 줄 착각하고 프로그램을 개발한다'는 점이다. 물론 이 문제는 MS의 잘못보다는 FireFox의 잘못이 더 크다고 생각한다.

특정 브로우저의 접속을 막기위해서는 일반적으로 HTTP 명세User-Agent(HTTP_USER_AGENT)를 사용한다. HTTP 명세와 User-Agent에대한 설명은 CGI 강좌를 참조하기 바란다.

만약 MS에서 FireFox를 골탕 먹이기위해 한 짓이라면 다음 명령들을 유닉스 명령행에서 실행하면 FireFox로 접속한 것과 마찬가지로 페이지 없음 메시지가 나타나야한다. 그러나 실제 확인해보면 페이지는 정상적으로 리턴된다. 한가지 주의할 것은 Windows에 포함된 telnet으로는 확인할 수 없으므로 유닉스의 명령행 프롬프트나 CRT를 이용해서 확인해보기 바란다.

1 # telnet www.microsoft.com 80
2 Trying 207.46.19.60...
3 Connected to www.microsoft.com.
4 Escape character is '^]'.
5 GET /korea/hangul/ HTTP/1.1
6 Host: microsoft.com
7 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-GB; rv:1.7.8) Gecko/20050417 Firefox/1.0.4
  • 숫자는 설명의 편의를 위해 붙인 것이다. 실제 테스트할 때는 숫자는 제외하고 입력한다.
  • #은 유닉스 명령행 프롬프트이다.
  • 7행은 한줄로 입력해야 한다.

명령 설명
1행: telnet 명령으로 www.microsoft.com의 웹 서비스(80)에 접속한다.
5행: GET 명령으로 /korea/hangul/ 폴더를 HTTP/1.1 명세로 요청한다.
6행: Host 헤더 전송한다.
7행: FireFox의 User-Agent 전송한다.

1과 5~7 행을 직접 입력하면 다음 그림처럼 정상적으로 리턴된 페이지를 확인할 수 있다. 즉, 서버측에서는 사용자가 어떠한 브로우저를 사용하는지 고려해서 결과를 리턴하는 것이 아니라는 것이다.

FireFox로 접속하면 페이지 없음 오류가 나타나는 것은 리턴된 문서에 다음과 같은 코드가 포함되어 있기 때문이다(그림에서 붉은색 직사각형).

<script language="JavaScript">
<!--
var userAgent = navigator.userAgent;
var MSIEIndex = userAgent.indexOf("MSIE");
if (userAgent.indexOf("Win")  == -1 || userAgent.indexOf("MSIE") == -1
    || userAgent.substring((MSIEIndex + 5),(MSIEIndex + 6)) < 5) 
        window.location.replace("default.htm");
//-->
</script>

이 코드는 브로우저가 MSIE가 아니거나 MSIE의 버전이 5.0 미만이면 문서의 위치를 /korea/hangul/default.htm으로 변경하는 소스이다. 우연의 일치인지 아니면 다른 이유가 있는지 모르지만 실제 /korea/hangul/default.htm라는 문서가 존재하지 않는다. 따라서 MSIE 이외의 브로우저나 MSIE 버전이 5.0 미만이라면 당연히 '페이지 없음' 오류가 나타난다. 실제 엉터리로 만든 주소 http://www.microsoft.com/korea/hangul/aaa를 입력해도 동일한 화면이 나타난다.

MS의 작태

이 소스는 MSIE 이외의 브로우저나 MSIE 5.0 미만의 브로우저로 접속하는 경우 페이지를 전환하기 위해서 집어넣은 소스이다. 분명 이러한 작태는 아주 MS적인 작태이다. 세상의 브로우저는 MSIE밖에 없다는 고질적인 작태다. 그러나 분명 FireFox를 골탕먹이기위해 삽입한 소스는 아니다.

또한 이 문제는 MS의 책임보다는 후발 주자인 FireFox의 책임이 훨씬 크다. MSIEUser-Agent는 지금도 Mozilla/4.0으로 시작된다. 그 이유는 선발 주자였던 Netscape과의 호환성을 고려한 것이었다. Netscape이 거의 사장된 지금도 MSIEUser-AgentMozilla/4.0으로 시작된다.

그러나 후발 주자로서 MSIE를 추격해야하는 입장인 FireFoxUser-Agent 스트링에는 MSIE를 고려한 부분이 전혀 없다. FireFox가 선발주자고 MSIE가 후발 주자라면 당연한 현상이겠지만 후발 주자로서 MSIE를 전혀 고려하지 않은 User-Agent는 비단 MS 사이트 뿐만아니라 극히 MS 지향적인 국내의 많은 사이트에서도 문제가 발생할 수 있다.

FireFox외에 Opera와 같은 다른 브로우저를 이용해서 접속하면 잘 접속된다. 그 이유는 대부분의 브로우저들이 MSIE와의 호환성을 고려해서 User-AgentMSIE라는 문자열을 포함하고 있기 때문이다. 참고로 Opera의 User-AgentMozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; en) Opera 8.0이다.

MS의 꼼수

마지막으로 다음 절차에따라 MSIE의 User-Agent를 MSIE 이외의 User-Agent로 변경하면 MSIE로도 해당 사이트에 접속할 수 없는 것을 확인할 수 있을 것이다.

  1. '시작/실행/regedit'를 입력하고 '확인'을 클릭한다.
  2. 다음 레지스트리로 이동한다.
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion \Internet Settings\5.0\User Agent
  3. 우측 패널의 '기본값'을 두번 클릭하고 값 데이터를 Mozilla/4.0로 설정한다.
  4. MSIE를 종료하고 다시 기동한다.
  5. http://www.microsoft.com/korea/hangul/에 접속한다.

MSIE의 User-Agent를 변경하고 http://www.microsoft.com/korea/hangul/에 접속하면 FireFox와 동일한 오류를 확인할 수 있다.

관련 글타래