프록시 자동설정 원리

Weblock 이라는 아이폰 앱이 있다.
이 앱은 광고 사이트나 패턴을 정리해서 프록시 자동설정 파일 (Proxy Auto-config, PAC)을
만들어 적용하여 사파리 등의 웹 브라우저에서 짜증나는 광고를 안띄워주는
고마운 프로그램이다.

필자의 경우 이 Weblock 을 무료일 때 다운받았는데, 이 앱 덕분에 쾌적한 브라우징을 할 수 있었다.
그렇다면 이 원리는 무엇인가?

해답은 바로 Weblock 을 사용하면서 URL을 보면 js URL을 복사하는 부분에서 찾을 수 있다.
이 url 복사 후 붙여넣으면 js 소스가 뜨는데 이게 바로 PAC에서 사용하는 JS다.

운이 좋게도 이 PAC 스크립트를 작성하는 가이드를 한글로 제공한 고마운 분이 있으니,
미꾸라지 PAC (Proxy auto-config) 문법 링크를 참조하라.
이 글에서는 간단한 작성법만 나열하므로 PAC에 대한 전체적인 레퍼런스를 보고 싶으면 위 링크로 가도록.

먼저, 이 스크립트를 처음 작성한다면 먼저 JS에 대한 기초 지식이 요구되며, 단 3가지 문법만 기억하면 된다.

//1. 첫번째 프록시 접속 후 실패 시 두번째 프록시 접속. 세미콜론(;)으로 구분하여 작성하면 된다.
var PROXY_URL = "PROXY proxy1.example.com:8080; PROXY proxy2.example.com:8080";
//2. 프록시를 사용하지 않고 직접 접속하는 키워드이다. 
var DIRECT = "DIRECT";
//3. 이제 적용하기 위해 함수를 작성하는데, 함수명은 FindProxyForURL 이 되시겠다.
//   콘솔 프로그램의 main 함수와 같은 역할을 하는 프록시의 주 실행 함수이다.
function FindProxyForURL(url, host){
    // example.com 및 그 하위 도메인은 직접 접속하도록 한다.
    if (shExpMatch(host, "*.example.com"))
    {
        return "DIRECT";
    }

    // 임의 도메인을 접속 시 아래 지정된 IP와 마스크로 접속했을 경우
    // fastproxy.example.com 포트 8080 이라는 프록시로 접속하도록 한다.
    if (isInNet(host, "10.0.0.0", "255.255.248.0"))
    {
        return "PROXY fastproxy.example.com:8080";
    }

    // 그리고 마지막으로 모든 접속을 proxy.example.com 포트 8080 으로 접속한다.
    // 만약 프록시 응답이 없을 경우 할 수 없이 다이렉트로 접속한다.
    return "PROXY proxy.example.com:8080; DIRECT";
}

끝이다. 어때요. 쉽죠?
위 파일을 js로 저장 후, 각 브라우저에서 프록시 설정에서 자동 프록시 설정할 때 저 스크립트를 작성한 URL을 지정하면 된다.
아이폰이나 안드로이드 같은 모바일 환경에서는 Wi-Fi 연결 시 프록시에서 자동 선택 후, URL을 입력하면 된다.

자. 이제 이 PAC을 응용하여 간단한 Ad-block 스크립트를 작성하도록 하겠다.


//직접 접속 키워드 var PROXY_DIRECT = "DIRECT"; //차단 키워드 //Dummy Proxy로 차단한다. 해당 IP는 구글 DNS IP이다. //즉, 실제 프록시도 아니고 어자피 응답 실패하는 거 알지만 //이걸 이용해서 광고 사이트를 무조건 실패하는 프록시로 강제 접속하는 //마법의 키워드이다. var BLACK = "PROXY 8.8.8.8:53"; function FindProxyForURL(url, host) { var u = url.toLowerCase(); var h = host.toLowerCase(); //광고 호스트 중 하나인 onclickads.net 호스트이거나, 페북에서 사용하는 광고 이미지를 더미 프록시로 차단한다. if (dnsDomainIs(h, "onclickads.net") || shExpMatch(u, "*/fb*akamaihd.net/*image.php*facebook.com*ads*image*")) { return BLACK; } //나머지는 직접 접속으로 정상 접속하도록. return PROXY_DIRECT; }

그리고 이걸 당신의 웹호스팅이다 Github Page에 넣고 자동 프록시 설정 주소에 넣으면 광고차단 효과가 있을 것이다.
이게 끝인가? 맞다. 끝이다.

마지막으로 PAC 스크립트 작성시 주의점을 알려주겠다.

  • 몇몇 브라우저는 PAC 스크립트 파일의 인코딩을 시스템 인코딩에 따른다. 예를 들면 IE는 UTF-8을 인식할 수 없다. 특히 한글 입력은 왠만하면 하지 말자.
  • 크로스 플랫폼 PAC 스크립트를 작성 시 가능하면 옛날식 JScript 시절 표준을 따르는 것이 좋다. 각 브라우저나 OS 자바스크립트 엔진을 따르기 때문이다.

참고자료

composite / 2015년 7월 15일 / Piss Development / 0 Comments

클라이언트가 Adblock 썼는지 어떻게 아냐? Adblock 감지법.

외국에서도 구글 애드센스 등의 광고 프로그램을 이용해서 블로그나 커뮤니티, 서비스를 하면서 광고를 뿌리고 있는데

이 불여우와 크롬에서 유명한 AdBlock 때문에 고충이 만만치 않다고 한다.

우리나라도 마찬가지.

그래서 여러가지 방법을 쓰고 있는데, 그렇다고 해서 한국처럼 “애드블록 무력화 시키면서까지 광고 띄우는” 짓은 하지 않아서 서비스 공급자가 알아서 해결하기도 한다.

가장 크게 작용하는 사이트가 바로 와레즈같은 좀 불법적인 사이트들이 많은데, 이들은 애드블록 키면 스크립트로 감지해서 다운받지 못하게 하고, 그렇다고 스크립트 끄면 역시 다운시켜주지 않는 수단까지 동원하고 있다.

그 애드블록을 감지하는 스크립트가 있나? 있다.

광고 서비스는 구글 애드센스 기준, 사용하고 있는 스크립트 프레임워크는 jQuery 기준으로 정말 간단하고 명료하다.

if ($('.myTestAd').height() == 0) {
        alert('광고 막지마 시새발끼야 나도 먹고살자.');
}

애드센스 외에도 다른 광고 서비스에서도 적용할 수 있다. 왜냐면 해당 광고에 컨텐츠가 막혀서 높이값이 0이 되기 때문이다.

AdBlock의 원리는 간단하다. 필터링 대상의 사이트 또는 엘리먼트를 찾아 컨텐츠 표시를 무력화한다. 컨텐츠가 없으니 컨텐츠 공급자가 높이값에 잘 조치를 하지 않기 때문에 대체적으로 높이값은 0이 된다. 이를 이용하여 감지하는 방법 되시겠다.


근데.. 사실 한국은 그닥 쓸데없는 팁 되시겠다. 아.. 그러고보니 구글 애드센스같은 외국 광고 서비스를 제공받는다면 해당되겠으나 대부분 국내 광고 서비스를 받고 있으며, 애드블록을 회피하는 방법을 불쌍한 개발자들이 구현했기 때문에 걱정없을 것이다.


그러나 사실 불쌍한 개발자들은 아니다. 구글링 잘하는 개발자는 이미 애드블록을 무력화시켜 광고를 표시했기 때문에 당신의 블로그나 사이트에 광고 표시는 걱정일랑 안해도 될 것이다.

이미 회피하는 방법이 나와 있기 때문이다. 간단하게 소개하겠다.

  1. 광고 요소에 ad나 click이라는 단어 있으면 무조건 빼라.
  2. 광고 사이즈를 교묘히 바꿔라. (애드블록은 사이즈 필터도 있기 때문에 그걸 교묘히 바꾸면 된다. (예. 468×60 대신 470×58 등)
  3. 왠만하면 광고 제공을 로컬에서 해라. 그리고 광범위하게 (ad나 banner 키워드 쓰다 걸려서 짤리지 말고)

우리나라에는 이런 팁 안날려서 내가 날렸다. 이렇게 대놓고. 날 원망하지 마라 컨텐츠 수급자들이여..

어떤 이는 여러분에게 몰랐던 정보를 제공하기 위해 돈들여서까지 해주는데, 그 수익은 추천도 있지만 광고도 있는데,

추천도 안하고 광고도 안봐주면 공급자가 정보 제공할 맛 나겠나? 어자피 돈들이는것도 아니니까 정보가 유용하다면 추천해주고 광고도 봐주자. 광고 클릭 안해도 되고 보기만 해도 되고, 광고 막았다고 해서 아쉽다 하지말고 추천이라도 해주자.


근데 나는 광고도 없고 추천버튼도 없어. 훈스닷넷이라도 추천버튼이 있지만 추천해주는 이도 없으니 나는 아마 안될거야.


참고자료

How to block Adblock – http://thepcspy.com/read/how_to_block_adblock/

Publishers: How To Bypass Ad Blocking Software – http://www.dotsauce.com/2008/02/27/how-to-bypass-ad-block-software/



composite / 2013년 6월 17일 / 미분류 / 1 Comment