동행복권 사이트는 복권 파는 사이트이다. 인터넷으로 복권을 사고 파니까 많은 사람들이 스마트폰을 이용해서 사이트를 이용했나 보다. 그래서 모바일에서는 로또 6/45는 못 사도록 막으라고 누군가가 압박을 하니까 법인지 규정인지를 만들었나 보다. 명목상은 도박 중독을 막기 위해서라고 하겠지.

그런데 서버에서 접속 단말을 PC인지 모바일인지 어떻게 판단할까? 동행복권 사이트는 아래와 같이 했다.

if (navigator.platform && /win16|win32|win64|mac/ig.test(navigator.platform) == false) {
	if ('https://m.dhlottery.co.kr'.indexOf(location.hostname) == -1 || 'https://m.dhlottery.co.kr'.indexOf(location.hostname) == -1 ) {
	  	location.href = 'https://m.dhlottery.co.kr';
	}
}

그렇다. 윈도우즈, 맥오에스가 아니면 모바일인 것이다. 16비트 윈도우즈가 어디서 쓰이는지 모르겠지만 그것은 제일 앞에 떡하니 넣어 주었는데 리눅스는 전혀 고려하지 않았다. 동행복권 고객센터에 말해 보았지만 들은 체 만 체다. 리눅스 사용자는 똑똑하니 알아서 잘 사용할 거란 생각일 것이다.

그럼 알아서 잘 해 보자. 파이어폭스에서는 user-agent 문자열을 변경해 주는 확장기능을 설치하면 해결된다. 브라우저는 서버에게 자기가 어떤 것인지 알려 주는데 이런 확장기능은 그것을 딴 것으로 바꿔 주어서 서버를 속인다. 그런데 서버를 속여서는 문제를 해결할 수 없다. 왜냐하면 내 브라우저 안에서 저 스크립트를 실행시켜서 모바일 페이지로 가게 하기 때문이다. User-agent 문자열에는 브라우저가 도는 운영체제에 대한 문자열이 포함되어 있어서 확장기능이 navigator.platform을 그에 맞게 변경해 주는 것 같다. 그래서 파이어폭스에서는 확장기능을 이용해 user-agent를 윈도우즈용 크롬이나 파이어폭스로 변경하기만 하면 제대로 PC라고 인식한다. 나는 User-Agent Switcher를 사용했다.

그런데 크롬에서는 확장기능을 설치해서 user-agent를 변경해 보아도 안 된다. 파이어폭스와 다르게 navigator.platform이라는 것을 변경하지 않아서인 것 같다. 그래서 확장기능을 만들어서 해결했다. 확장기능 만들기 튜토리얼에서 소스를 내려받은 후에 images 디렉토리만 남기고 다 지운 후에 manifest.json과 자바스크립트 소스 파일을 추가해 준다. 튜토리얼에서 받은 소스는 그냥 아이콘 이미지만 필요해서…

manifest.json:

{
  "name": "FakeNavigator",
  "version": "1.3",
  "description": "Fake navigator.platform",
  "permissions": [],
  "content_scripts": [ {
    "js":       [ "navigator_change.js" ],
    "matches":  [ "*://*.dhlottery.co.kr/*" ],
    "run_at":   "document_start"
  } ],
  "icons": {
    "16": "images/get_started16.png",
    "32": "images/get_started32.png",
    "48": "images/get_started48.png",
    "128": "images/get_started128.png"
  },
  "manifest_version": 2
}

navigator_change.js1:

var codeToInject = 'Object.defineProperty(navigator,"platform", { \
  get: function () { return "MacIntel"; }, \
  set: function (a) {} \
 });';
var script = document.createElement('script');
script.appendChild(document.createTextNode(codeToInject));
(document.head || document.documentElement).appendChild(script);
script.parentNode.removeChild(script);

그리고 크롬에서 확장기능 설정을 연 후에 개발자 모드를 켜 준다. 그러면 압축해제된 확장 프로그램을 로드합니다라는 버튼이 보이는데 그걸 누른다. 그리고 방금 만든 확장기능 디렉토리를 선택한다. 그러면 확장기능이 로드되고 동행복권 사이트에서 작동한다.

확장 프로그램 스크린샷

PC를 모바일로 인식해서 괜한 수고를 하게 했으니 모바일을 PC로 속여서 이용해 보자. 안드로이드 스마트폰에 파이어폭스 앱이 있다. 거기에서도 user-agent를 변경하는 확장기능을 설치할 수 있다. 모바일에서 이용해 보자.


  1. 스택오버플로우 사이트 질문↩︎